http://www.lydsy.com/JudgeOnline/problem.php?id=3643

因为$$\varphi(n)=\prod_i p_i{k_i-1}(p_i-1),n=\prod_ip_i{k_i}$$

直接根据这个式子暴搜即可。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1 << 16; bool notp[N];
int prime[N], num = 0, ans; void shai() {
for (int i = 2; i < N; ++i) {
if (!notp[i])
prime[++num] = i;
for(int j = 1; j <= num && prime[j] * i < N; ++j) {
notp[i * prime[j]] = true;
if (i % prime[j] == 0)
break;
}
}
} int n; bool zhi(int x) {
for(int i = (int) sqrt(x); i >= 2; --i)
if (x % i == 0) return false;
return true;
} ll dfs(int tmp, int k) {
if (k == 1) return 1;
ll ans = -1, t, bas;
int m;
for(int i = tmp; i <= num && prime[i] - 1 <= k; ++i)
if (k % (prime[i] - 1) == 0) {
m = k / (prime[i] - 1); bas = prime[i];
t = dfs(i + 1, m);
if (t != -1 && (ans == -1 || ans > bas * t)) ans = bas * t;
while (m % prime[i] == 0) {
m /= prime[i], bas *= prime[i];
t = dfs(i + 1, m);
if (t != -1 && (ans == -1 || ans > bas * t)) ans = bas * t;
}
} if (k >= N && zhi(k + 1) && (ans == -1 || ans > 1ll + k))
ans = 1ll + k;
return ans > 2147483647 ? -1 : ans;
} int main() {
shai();
scanf("%d", &n);
printf("%lld\n", dfs(1, n));
return 0;
}

【BZOJ 3642】Phi的反函数的更多相关文章

  1. [BZOJ]3643 Phi的反函数

    我承认开这篇文章只是因为好笑…… 估计Zky神看见3737会很郁闷吧. http://www.lydsy.com/JudgeOnline/problem.php?id=3643 本来想直接交3737改 ...

  2. 【BZOJ-3643】Phi的反函数 数论 + 搜索

    3643: Phi的反函数 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 141  Solved: 96[Submit][Status][Discuss ...

  3. 【BZOJ 3643】Phi的反函数 数搜索

    这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...

  4. bzoj3643 Phi的反函数

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3643 [题解] n = p1^a1*p2^a2*...*pm^am phi(n) = p1( ...

  5. bzoj 3643Phi的反函数

    3643: Phi的反函数 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 298  Solved: 192[Submit][Status][Discus ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. bzoj题目分类

    转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...

  8. 【BZOJ 2818】Gcd - 筛法求素数&phi()

    题目描述 给定整数,求且为素数的数对有多少对. 分析 首先筛出所有的素数. 我们考虑枚举素数p,统计满足的个数,等价于统计的个数,即统计以内满足互质的有序数对个数. 不难发现,也就是说,我们只要预处理 ...

  9. BZOJ 2818

    2818:GCD Description 给定整数$N$,求$1\le x,y\le N$且$\gcd{x,y}$为素数的数对$(x,y)$有多少对. Input $N$ Output RT Samp ...

随机推荐

  1. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

  2. [Android]官网《monkeyrunner》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Develope ...

  3. Objective-C 快速入门--基础(四)

    1.什么是Block? ① 块语法,本质上是匿名函数(没有名称的函数): ② Block是OC中的一种数据类型,在iOS开发中被广泛使用: ③ ^是Block的特有标记: ④ Block的实现代码包含 ...

  4. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  5. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  6. __block 和 __weak的区别

    Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) ...

  7. Git 技能总结

    创建和使用git ssh key 首先设置git的user name和email: git config --global user.name "xxx" git config - ...

  8. 安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章

    Windows 10操作系统是目前Windows平台最新的操作系统,其相对于其它旧版的操作系统是一个比较成功的操作系统.微软直接使用10版本号,跳过了9版本号进行发布这款操作系统,说明windows ...

  9. 项目管理过程组和知识领域表(PMBOK2008)

    项目管理过程组和知识领域表(PMBOK2008) 知识领域 项目管理过程组 启动过程组 规划过程组 执行过程组 监控过程组 收尾过程组  4. 项目整合管理 4.1 制定项目章程 4.2 制定项目管理 ...

  10. Ant :Property

     Property Ant 内置的Property 系统属性 Ant附加的属性 自定义Property Ant :Property properties是由key-value组成的集合,就是Java中 ...