hdu 1286

来源:互联网 发布:唯美的句子 知乎 编辑:程序博客网 时间:2024/06/01 09:01
//   http://acm.hdu.edu.cn/showproblem.php?pid=1286//    这是一个数论问题,求互质的数字有多少个////////////////////////////////////////////////////////////    用素数删选法选出满足条件的//   法一://   Accepted1286156MS348K602 BC#include<stdio.h>int peo[32768];int main(){    int i,j,n,t,pos;    while(scanf("%d",&t)!=EOF)    {        while(t--)        {            scanf("%d",&n);            for(i=1;i<=n;i++)               peo[i]=1;            for(i=2;i<=n;i++)            {                if(n%i==0)                 for(j=i;j<=n;j+=i)                    peo[j]=0;            }            pos=0;            if(n!=1)  // 说明不止一个人            for(i=1;i<=n;i++)              if(peo[i])                 pos++;            printf("%d\n",pos);              }    }    return 0;}////////////////////////////////////////////////   下面一种利用到欧拉的phi函数//     法二://  Accepted128615MS220K570 BC#include<stdio.h>int phi(int n)   //  这个是常见的phi函数模版{    int ans,i,k;    if(n==1)       ans=0;    else    {        ans=n;k=1;        for(i=2;n!=1;i+=k)        {            if(n%i==0)            {                ans*=(i-1);ans/=i;                while(n%i==0)                  n/=i;                i=k;              }        }    }    return ans;   }int main(){    int n,t;    while(scanf("%d",&t)!=EOF)    {        while(t--)        {            scanf("%d",&n);            printf("%d\n",phi(n));        }    }    return 0;}