hdu 4215——Number Theory

来源:互联网 发布:lovelace第一位程序员 编辑:程序博客网 时间:2024/05/18 13:48

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4215

转载地址:http://blog.csdn.net/lhshaoren/article/details/7486111

/*E[i]表示欧拉函数,F[i]表示因子个数思路:欧拉函数,随着因子的增大,会成递增趋势(并非严格递增),因子个数也会递增,但两个函数的递增趋势相差很大,所以可以使用打表来发现规律。程序打表后发现,30之后开始,结果都为10。*/#include <cstdio>int ans[]={0,1,1,2,2,4,5,5,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,9,10};int main(){//freopen("f://data.in","r",stdin);int T,N;scanf("%d",&T);for(int cas=1;cas<=T;cas++){scanf("%d",&N);if(N<30)printf("Case %d: %d\n",cas,ans[N]);elseprintf("Case %d: 10\n",cas);}return 0;}//打表程序#include <cstdio>#include <cstring>const int nMax=100;int E[nMax],F[nMax];int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);}int main(){freopen("f://data.out","w",stdout);memset(E,0,sizeof(E));memset(F,0,sizeof(F));for(int i=1;i<nMax;i++){for(int j=1;j<=i;j++){if(gcd(i,j)==1)E[i]++;if(i%j==0)F[i]++;}}for(int i=1;i<nMax;i++){if(i%10==0)printf("\n");printf("%d ",E[i]);}printf("\n***************************************\n");for(int i=1;i<nMax;i++){if(i%10==0)printf("\n");printf("%d ",F[i]);}printf("\n***************************************\n");for(int i=1;i<nMax;i++){int ans=0;for(int l=1;l<=i;l++)for(int r=l;r<=i;r++){int sum1=0,sum2=0;for(int k=l;k<=r;k++){sum1+=E[k];sum2+=F[k];}if(sum1==sum2)ans++;}printf("%d,",ans);if(i%10==0) printf("\n");}printf("\n***************************************\n");return 0;}


原创粉丝点击