博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10837 A Research Problem
阅读量:6951 次
发布时间:2019-06-27

本文共 1321 字,大约阅读时间需要 4 分钟。

 

求最小的n,使phi(n)=m

 

#include
#include
#define N 10011int prime[N],cnt;bool v[N],vis[N];int p[N],tot,ans;void pre_prime(){ for(int i=2;i
=N) break; v[i*prime[j]]=1; if(i%prime[j]==0) break; } }}int judge(int n){ if(n==1) return 1; n++; for(int i=1;i<=cnt && prime[i]*prime[i]<=n;i++) if(n%prime[i]==0) return -1; for(int i=1;i<=tot;i++) if(vis[i] && n==p[i]) return -1; return n;}void dfs(int now,int left,int sum){ if(sum==tot+1) { int ret=judge(left); if(ret>0) ans=std::min(ans,now*ret); return; } dfs(now,left,sum+1); if(left%(p[sum]-1)==0) { vis[sum]=1; now*=p[sum]; left/=p[sum]-1; while(1) { dfs(now,left,sum+1); if(left%p[sum]) break; left/=p[sum];now*=p[sum]; } vis[sum]=0; }}void solve(int n){ tot=0; ans=2e9; for(int i=1;i<=cnt && n>=(prime[i]-1)*(prime[i]-1);i++) if(n%(prime[i]-1)==0) p[++tot]=prime[i]; dfs(1,n,1);}int main(){ pre_prime(); int n,t=0; while(scanf("%d",&n)!=EOF) { if(!n) return 0; solve(n); printf("Case %d: %d %d\n",++t,n,ans); }}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7422283.html

你可能感兴趣的文章
简单的随笔 ,WSDL工具,Oracle备份还原,java调用.net webservice
查看>>
Java实现MD5加密解密类
查看>>
一个小型网游服务器
查看>>
OS操作系统----->CMOS设置
查看>>
php_study progress(1)
查看>>
Problem A
查看>>
【R语言系列】R语言初识及安装
查看>>
Samba共享权限分配
查看>>
mkdir命令
查看>>
基础命令(2018-05-07)
查看>>
微信小程序之页面下拉刷新
查看>>
《构建之法》阅读笔记01
查看>>
poj 3621 二分+spfa
查看>>
跨域解决方案之HTML5 postMessage
查看>>
2018.10.23-dtoj-1751小P的牧场(pasture)
查看>>
Mac下配置Eclipse <转>
查看>>
杂项随记:gcc/objdump/section等
查看>>
webstrom的坑
查看>>
正则表达式
查看>>
对我影响最大的三位老师
查看>>