求质因数

题意:求1-n内与n互质的数的个数
code:
#include<iostream>
#include<cstdio>
#include<cstdlib>
int phi[10000];
int main()
{
    int n,i,cnt,j,s;
    while(scanf("%d",&n)!=EOF)
    {
        cnt=0;s=n;
        for(i=2;i*i<=n;i++)  //求质因数
        {
            if(n%i==0)
            {
                phi[cnt++]=i;
                while(n%i==0)
                    n/=i;
            }
        }
        if(n>1)
            phi[cnt++]=n;
        for(i=0;i<cnt;i++)
        {
            s=s/phi[i]*(phi[i]-1);
        }
        printf("%d\n",s);
    }
}
/*
phi(x) = (p1-1)/p1*(p2-1)/p2....*(pn-1)/pn * x
*/ 

posted on 2012-07-26 12:23  acmer-jun  阅读(193)  评论(0)    收藏  举报

导航