HDU 1787 GCD Again

题目大意:求小于n的gcd(i,n)大于1的个数;

题解:欧拉函数直接求gcd(i,n)==1的个数  用n减即可

#include <cstdio>
int eular(int n){
    int ret=1,i;
    for(i=2;i*i<=n;i++)
    if(n%i==0){
        n/=i,ret*=i-1;
        while(n%i==0)n/=i,ret*=i;
    }
    if(n>1) ret*=n-1;
    return ret;
}
int main(){
    int n; 
    while(scanf("%d",&n),n!=0)printf("%d\n",n-eular(n)-1);
    return 0;
}
posted @ 2014-04-07 15:10  forever97  阅读(108)  评论(0编辑  收藏  举报