hunnu--11550--欧拉函数
来源:互联网 发布:国税数据质量整改 编辑:程序博客网 时间:2024/06/06 02:21
欧拉函数Time Limit: 3000ms, Special Time Limit:6000ms, Memory Limit:65536KBTotal submit users: 73, Accepted users: 59Problem 11550 : No special judgementProblem description 一个数x的欧拉函数Φ(x)定义为所有小于x的正整数中与x互质的数的数目,如小于5且和5互质的数有1、2、3、4,一共4个,故Φ(5)=4。
Output 输出需要的步数,如果无法得到,输出-1;
Sample Input
对于任意正整数x,我们定义两种操作:
1、f(x) = x + Φ(x);
2、g(x) = x * Φ(x);
现在,给定一个数a,问从1开始,需要多少步操作能得到a。
(如,当a = 2时,f(1)即为所求,故答案为1,而当a = 3时,f(f(1))即为所求,故答案为2)
Output 输出需要的步数,如果无法得到,输出-1;
Sample Input
23Sample Output
12Problem Source HUNNU Contest
如果你不知道求欧拉函数的话那么这题还是不要看了,就像我一样~~
打欧拉表的是网上找的,我自己写的只有下面的dp
#include <cstdio>#include <cstring>#include <iostream>#include <malloc.h>#define LL long longusing namespace std;const LL N = 100001;LL n;LL *phi,i,j; char *prime;LL flog;LL visit[N];LL dp[N],num[N];int main(){ prime=(char*)malloc((N+1)*sizeof(char)); prime[0]=prime[1]=0; for(i=2; i<N; i++) prime[i]=1; for(i=2; i*i<N; i++) { if(prime[i]) { for(j=i*i; j<=N; j+=i) { prime[j]=0; } } } //这段求出了N内的所有素数 phi=(LL*)malloc((N+1)*sizeof(LL)); for(i=1; i<N; i++) { dp[i]=N;//dp初始化 phi[i]=i; } for(i=2; i<N; i++) { if(prime[i]) { for(j=i; j<N; j+=i) { phi[j]=phi[j]/i*(i-1); //此处注意先/i再*(i-1),否则范围较大时会溢出 } } }//以上都是打表部分,表示没细心去看,导致连注释都懒得改了,原创大哥看到了别喷我~ dp[1]=0;
//dp的递推思路就是用小点推出大点,因为上面两个公式是递增的,所以从小到大来遍历的话,每次遍历到的点都是已经求出了最优方案的 for(i=1;i<N;i++) { if(i+phi[i]<N&&dp[i+phi[i]]>dp[i]+1)//用公式1如果没有过界,同时当前方案用的步数更少,那么替换 dp[i+phi[i]]=dp[i]+1; if(i*phi[i]<N&&dp[i*phi[i]]>dp[i]+1)//用公式2如果没有过界,同时当前方案用的步数更少,那么替换 dp[i*phi[i]]=dp[i]+1; } while(scanf("%lld",&n)!=-1) { if(dp[n]<N)//因为dp初始化就是N,所以这一步不能少。 printf("%lld\n",dp[n]); else printf("-1\n"); } return 0;}
0 0
- hunnu--11550--欧拉函数
- 欧拉函数
- 欧拉函数
- Relatives 【欧拉函数】
- 欧拉函数
- POJ_2407_欧拉函数
- 欧拉函数
- hdu_3501_欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数应用
- 欧拉函数
- 欧拉函数
- 欧拉函数
- [android]初识ShareSDK——嵌入和登陆
- linux sh/bash 编程常用
- Struts2的几种传参方式
- Java Web 经典开发模式
- 隐马尔科夫学习五(一)
- hunnu--11550--欧拉函数
- Swing高级JProgressBarTest进度条
- MySQL执行外部sql脚本文件的命令
- 32位int整型数的二进制表示中1的个数
- 了解URL编码的基本概念,在javascript和java程序中使用内置的API进行编码和解码
- 欢迎使用CSDN-markdown编辑器
- Yii2设置别名函数(setAlias)和获取别名函数(getAlias)
- android应用开发全程实录-你有多熟悉listview? getView重写 inflate结合各种Adapter实例
- C++操作符重载