正题

题目链接:https://www.luogu.com.cn/problem/P4780


题目大意

给出nnn,求一个最小的xxx满足φ(x)=n\varphi(x)=nφ(x)=n。
若不存在或者大于2312^{31}231则输出−1-1−1。

1≤n≤2311\leq n\leq 2^{31}1≤n≤231


解题思路

考虑用φ\varphiφ比较常用的公式,把nnn拆成若干个∏(pi−1)∗pici\prod (p_i-1)*p_i^{c_i}∏(pi​−1)∗pici​​的形式。因为这个不会超过logloglog个所以可以暴力搜索比较小的质数,然后直到nnn剩下一个pi+1p_i+1pi​+1时或111时再暴力判断。


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】相关推荐

  1. 2017.10.7 phi的反函数 失败总结

    数论题好难啊,,分析也好,爆搜也好,剪枝也好,什么都不会啊 一开始能想到的就只有根据单点求phi来进行反推... 然后并不能保证最小解,,而且搜索意味不明. 其实需要注意到任意的phi值 全部都是可以 ...

  2. 【BZOJ3643】phi的反函数,暴搜

    传送门 思路: 爆搜好题,hack好题(?) 程序最后附带三组数据-- 暴力搜索有哪些质因子 比较重要的一个是n最多只有一个大于n√\sqrt n的质因子 也就是我们只用找所有小于等于n√\sqrt ...

  3. 大视野上每道题的知识点

    https://blog.csdn.net/BOYxiejunBOY/article/details/54773714 在大神基础上细化 1000:A+B 1001:平面图最小割,转对偶图最短路 10 ...

  4. 【业界偷懒】【Public】BZOJ题目一句话题解整理

    转发[Hzwer]: 就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A ...

  5. 【醒目】【业界偷懒】【Public】BZOJ题目一句话题解整理

    就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A过得大部分奶牛题)是别 ...

  6. 【SPOJ5971】LCMSUM

    [问题描述] 求sigma(lcm(i,n)),1 <= i <= n. [分析] 跟求sigma(gcd(i,n)) 有点像(POJ2480 Longge's problem),都是枚举 ...

  7. GDCPC2016题解 by lby@SYSU | Asiimov

    Problem A. ABCD 题目大意 给出一个四边形四条边AB.CD.AD.BCAB.CD.AD.BC及两条对角线AC.BDAC.BD的长度,问这个四边形的顶点能否在一个圆上 算法思路 通过余弦定 ...

  8. CF Edu54 E. Vasya and a Tree DFS+树状数组

    Vasya and a Tree 题意: 给定一棵树,对树有3e5的操作,每次操作为,把树上某个节点的不超过d的子节点都加上值x; 思路: 多开一个vector记录每个点上的操作.dfs这颗树,同时以 ...

  9. 小白月赛13 F:小A的最短路(LCA + dfs)

    链接:https://ac.nowcoder.com/acm/contest/549/F 来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一 ...

最新文章

  1. CentOS 6.3安装(详细图解教程)
  2. javascript 运算优先级
  3. 开源PCRF、PCRF体验与PCRF实现
  4. Linux-安装FFmpeg
  5. Boost中的Timer的使用——计算时间流逝
  6. cacti+nagios 整合遇到的问题
  7. 百度新闻的索引机制(二):智能聚类
  8. 关于 create-react-app 自定义 eslint文件配置解决方案
  9. 信息学奥赛一本通(1094:与7无关的数)
  10. java单词转化为数组_java中数组与List相互转换的方法
  11. UE4官方文档UI学习:5.UMG 创建3D控件交互
  12. FTP文件上传Java代码实操
  13. K3C官改固件更新frp客户端
  14. 车辆维修管理系统mysql_4S店汽车维修管理系统的分析与设计(JSP+MySQL)
  15. CharNet阅读笔记
  16. 滴滴DSRC抢楼大赛,十一快车券飞起来
  17. python校园网站毕业设计开题报告
  18. miui patchrom项目开发详细教程(Being updated)
  19. ROC/AUC、精准率、召回率、真正率,假正率等指标含义,学习笔记
  20. 干货分享——shutdown命令

热门文章

  1. python求导函数的值_python怎么实现函数求导
  2. 构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...
  3. 用wxpython做ui_wxPython - 如何强制UI刷新?
  4. matlab求滤波器的冲激响应,在TMS320C5410上用MATLAB实现有限冲激响应滤波器
  5. c语言 java 性能 测试_这个蓝桥杯系统的题,用c语言去评测是满分,改为Java说运行错误是0分,但是我查看输入输出,至少第...
  6. python类变量共享吗_第7.12节 可共享的Python类变量
  7. 获取两个数据的交集_MySQL交集和差集的实现方法
  8. github设置中文_【Github】100+ Chinese Word Vectors 上百种预训练中文词向量
  9. 46. 全排列015(回溯法求解)
  10. [MyBatisPlus]条件构造器wapper