bzoj3643 Phi的反函数
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3643
【题解】
n = p1^a1*p2^a2*...*pm^am
phi(n) = p1(p1-1)^(a1-1)*p2(p2-1)^(a2-1)*...*pm^(am-1)
最多有10个不同的质因数就超过maxint了,这告诉我们可以搜索
我们假设p1<p2<p3<...<pm
那么我们处理出<sqrt(n)的质数,因为我们只会用到这些质数来搜(因为其他平方完就爆炸了)
那么我们就暴力尝试是否被(pi-1)整除,是的话枚举因子个数,dfs下去即可
注意特判如果我当前剩下了n,n+1是个质数,那么也可以是直接当前答案*(n+1)
复杂度……我咋知道
O(能过)
- # include <math.h>
- # include <stdio.h>
- # include <string.h>
- # include <iostream>
- # include <algorithm>
- // # include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef unsigned long long ull;
- const int M = 5e4 + ;
- const int mod = 1e9+;
- # define RG register
- # define ST static
- ll ans = 1e18;
- int n, F;
- bool isnp[M];
- int p[M/], pn=;
- inline bool isprime(int n) {
- for (int i=, to = sqrt(n); p[i] <= to; ++i)
- if(n % p[i] == ) return false;
- return true;
- }
- inline void dfs(int n, int lst, ll sum) {
- if(sum >= ans) return;
- if(n == ) { ans = sum; return ; }
- if(n > F && isprime(n+)) ans = min(ans, sum*(n+));
- for (int i=lst+; p[i]- <= F && p[i]- <= n; ++i) {
- if(n % (p[i]-) == ) {
- int t = n/(p[i]-); ll res = sum * p[i];
- dfs(t, i, res);
- while(t % p[i] == ) {
- t /= p[i];
- res *= p[i];
- dfs(t, i, res);
- }
- }
- }
- }
- int main() {
- cin >> n;
- F = sqrt(n);
- isnp[] = isnp[] = ;
- for (int i=; i<=; ++i) {
- if(!isnp[i]) p[++pn] = i;
- for (int j=; j<=pn && i*p[j] <= ; ++j) {
- isnp[i*p[j]] = ;
- if(i%p[j] == ) break;
- }
- }
- dfs(n, , );
- if(ans <= ) cout << ans << endl;
- else cout << - << endl;
- return ;
- }
bzoj3643 Phi的反函数的更多相关文章
- 【BZOJ-3643】Phi的反函数 数论 + 搜索
3643: Phi的反函数 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 141 Solved: 96[Submit][Status][Discuss ...
- 【BZOJ 3642】Phi的反函数
http://www.lydsy.com/JudgeOnline/problem.php?id=3643 因为\[\varphi(n)=\prod_i p_i^{k_i-1}(p_i-1),n=\pr ...
- [BZOJ]3643 Phi的反函数
我承认开这篇文章只是因为好笑…… 估计Zky神看见3737会很郁闷吧. http://www.lydsy.com/JudgeOnline/problem.php?id=3643 本来想直接交3737改 ...
- 【BZOJ 3643】Phi的反函数 数搜索
这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...
- bzoj 3643Phi的反函数
3643: Phi的反函数 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 298 Solved: 192[Submit][Status][Discus ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj题目分类
转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...
- LLVM 笔记(二)—— PHI node
ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...
- LLVM 笔记(一)—— phi 指令
ilocker:关注 Android 安全(新手) QQ: 2597294287 语法: <result> = phi <ty> [ <val0>, <lab ...
随机推荐
- C语言结构体指针成员强制类型转换
#include <stdio.h> #include <stdlib.h> typedef struct ListElmt_ { void *data; struct Lis ...
- IDA 对 SO 的逆向
ApkTool对apk进行解包,在解包后的lib目录中找到so文件 so文件大概有以下几种 armeabi: 第5代.第6代的ARM处理器,早期的手机用的比较多. armeabiv-v7a:第7代及以 ...
- python,多线程
多线程编程,模型复杂,容易发生冲突,必须用锁加以隔离,同时,又要小心死锁的发生. Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核.多线程的并发在Python中就是一个美丽的梦. ...
- Android获取状态栏的高度:
方法一: //获取手机状态栏高度 public static int getStatusBarHeight(Context context){ Class<?> c = null; Obj ...
- Java架构师必会的技能
Java架构师必会的技能 我把它分为了五大专题 工程化专题 工程化专题 git git安装使用 git日常使用:fetch/pull/push/revert/rebase git分支管理git flo ...
- python学习笔记五:模块和包
一.模块用import导入 cal.py: #!/usr/bin/python def add(x,y): return x+y if __name__ == '__main__': print ad ...
- 梆梆加固还原DEX文件
0x01 先说总结: 参照https://www.cnblogs.com/jiaoxiake/p/6818786.html 最后说的步骤, 参考:https://www.52pojie.cn/thre ...
- 手把手教你写Windows 64位平台调试器
本文网页排版有些差,已上传了doc,可以下载阅读.本文中的所有代码已打包,下载地址在此. ------------------------------------------------------- ...
- Visual Studio使用技巧笔记(引用程序集自动复制dll到引用项目目录)
copy /y $(TargetPath) $(SolutionDir)\[您项目引用dll文件的目录]\$(TargetFileName) 例如:copy /y $(TargetPath) $(So ...
- 问题:JFinal框架使用FreeMarker渲染视图报错
本人用的是JFinal-3.4. 问题描述: 在JFinal框架中使用FreeMarker渲染视图时,报 Caused by: java.lang.ClassNotFoundException: fr ...