方法一

 

 

#include<stdio.h>

#include<string.h>

#include<math.h>

int main()

{

       int i,j,k,n,t;

       int b[32800];

       scanf("%d",&n);

       while(n--)

       {

              t=0;

              memset(b,0,sizeof(b));

            scanf("%d",&k);

         for(j=2;j<=k;j++)

                if(k%j==0)

                       for(i=j;i<=k;i+=j)

                              if(i%j==0)

                                    b[i]=1;

          for(i=1;i<k;i++)

                  if(b[i]==0)

                       t++;

        

                printf("%d\n",t);

 

      

             

       }return 0;

}

方法2;欧拉公式

#include <iostream>6
#include <cstdio>
#include <cmath>
using namespace std;
 
int eular(int x)
{
    int i,res = x;
    for(i = 2;i < (int)sqrt(x*1.0) + 1;i++)
        if(x % i == 0)
        {
            res = res / i * (i-1);
            while(x % i == 0)
               x /= i;
        }
        if(x > 1)
            res = res/x *(x-1);
        return  res;
}
int main()
{
    int a,n;
    freopen("in.txt","r",stdin);
    cin>>a;
    while(a--)
    {
        cin>>n;
        int res = eular(n);
        cout<<res<<endl;
    }
    return 0;

}