P4780-Phi的反函数【dfs】
正题
题目链接:https://www.luogu.com.cn/problem/P4780
题目大意
给出\(n\),求一个最小的\(x\)满足\(\varphi(x)=n\)。
若不存在或者大于\(2^{31}\)则输出\(-1\)。
\(1\leq n\leq 2^{31}\)
解题思路
考虑用\(\varphi\)比较常用的公式,把\(n\)拆成若干个\(\prod (p_i-1)*p_i^{c_i}\)的形式。因为这个不会超过\(log\)个所以可以暴力搜索比较小的质数,然后直到\(n\)剩下一个\(p_i+1\)时或\(1\)时再暴力判断。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=46360;
ll n,ans,cnt,pri[N/10];
bool v[N];
void Prime(){
for(ll i=2;i<N;i++){
if(!v[i])v[i]=1,pri[++cnt]=i;
for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
return;
}
bool IsPri(ll x){
if(x%2==0)return 0;
for(ll i=3;i*i<=x;i+=2)
if(x%i==0)return 0;
return 1;
}
void dfs(ll phi,ll x,ll k){
if(phi>(1ll<<31))return;
if(x==1){
ans=min(ans,phi);
return;
}
if(x>sqrt(n)&&IsPri(x+1))
ans=min(ans,phi*(x+1));
if(pri[k]>x)return;
for(ll i=k;i<=cnt;i++){
if(x%(pri[i]-1)==0){
ll z=x/(pri[i]-1),p=phi*pri[i];
dfs(p,z,i+1);
while(z%pri[i]==0){
p*=pri[i];z/=pri[i];
dfs(p,z,i+1);
}
}
}
return;
}
signed main()
{
scanf("%lld",&n);
Prime();ans=(1ll<<32);
dfs(1,n,1);
if(ans==(1ll<<32))puts("-1");
else printf("%lld\n",ans);
return 0;
}
P4780-Phi的反函数【dfs】的更多相关文章
- 【BZOJ-3643】Phi的反函数 数论 + 搜索
3643: Phi的反函数 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 141 Solved: 96[Submit][Status][Discuss ...
- bzoj3643 Phi的反函数
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3643 [题解] n = p1^a1*p2^a2*...*pm^am phi(n) = p1( ...
- 【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的反函数 数搜索
这道题是典型的数搜索,讲究把数一层一层化小,而且还有最重要的大质数剪枝. #include <cstdio> #include <cmath> typedef long lon ...
- [BZOJ]3643 Phi的反函数
我承认开这篇文章只是因为好笑…… 估计Zky神看见3737会很郁闷吧. http://www.lydsy.com/JudgeOnline/problem.php?id=3643 本来想直接交3737改 ...
- 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:矩阵树 ...
- HDU 1695 GCD 欧拉函数+容斥定理
输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...
随机推荐
- redis和memecache有什么区别?
1.memcache所有值均是简单地字符串,redis有复杂的数据类型. 2.memcache不支持数据持久化,redis支持数据持久化. 3.redis速度比memcache快,redis构建了自己 ...
- 被MySQL慢日志查询搞废了?3分钟教你快速定位慢查询问题!
一条慢查询会造成什么后果?刚开始使用MySQL的开发.初级DBA 以为就是简单的查询变慢些,体验稍微有一丢丢影响,殊不知,慢查询的破坏力远不止如此.业务高峰期,这头SQL还没处理完,大量新的查询请求堆 ...
- 【译】JavaScript async / await:好的部分,陷阱和如何使用
async/await提供了一种使用同步样式代码异步访问资源的选项,而不会阻塞主线程.然而,使用它有点棘手.在本文中,我们将从不同的角度探讨async / await,并将展示如何正确有效地使用它们. ...
- 在WPF中的ItemsControl中使用事件和命令(Using events and Commands within ItemsControl in WPF)
Say I have a standard WPF ItemsControl bound to an ObservableCollection of "Dog" objects l ...
- 定时执行的任务Quartz.net
- Map 综述(二):彻头彻尾理解 LinkedHashMap
摘要: HashMap和双向链表合二为一即是LinkedHashMap.所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的Hash ...
- 刷题-力扣-122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell ...
- HCNP Routing&Switching之OSPF LSA类型
前文我们了解了OSPF中的虚连接相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15202348.html:今天我们来聊一聊OSPF数据包中LSA类型相 ...
- 自己封装一个Object.freeze()方法
1.遍历所有属性和方法 2.修改遍历到的属性的描述 3.Object.seal() Object.defineProperty(Object,'freezePolyfill',{ value:func ...
- @RequestParam注解的详细介绍
@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参. 有三个属性: (1)v ...