HDU 1787 GCD Again 【欧拉函数模板】

来源:互联网 发布:淘宝的火麻叶是真的么 编辑:程序博客网 时间:2024/05/20 09:07

 

点击打开链接

 

#include<stdio.h>#include<math.h>int gcd(int n)//这里可以直接利用欧拉函数的性质:小于n并与n互质的数的个数 {    int i,j,ans=n;    for(i=2;i<=sqrt(n);i++)//i的范围是这些,判断n是否是质数时就是判断到sqrt(n)就可以。这里跳出循环可以判断n已经是1或者质数了     if(n%i==0)    {       ans=ans/i*(i-1);       while(n%i==0)n/=i;//这里可以保证i一定会是素数,因为下次出现i的倍数的时候不会进去这个循环     }    if(n>1)ans=ans/n*(n-1);//有可能除到最后 本身还是一个质因子     return ans;} int main(){    int n;    while(scanf("%d",&n),n)    printf("%d\n",n-1-gcd(n));    return 0;}


 

 简单的欧拉函数模板套用

自己写的

#include<stdio.h>int euler(int n){int ret=n,i;for(i=2;i*i<=n;i++)if(n%i==0){ret=ret-ret/i;while(n%i==0)n/=i;}if(n>1)ret=ret-ret/n;return ret;}int main(){int n;while(scanf("%d",&n),n)printf("%d\n",n-1-euler(n));}




 

 

0 0
原创粉丝点击