一道红果果的水题,但刚开始的时候还是傻傻的用gcd求,结果就杯具了。 。。后来用筛选法AC了。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
using namespace std;
const int N=32768+10;
typedef struct People
{
char num[N],adr[N],name[N];
};
int a[N],n;
int main()
{
int t,i,j;
cin>>t;
while(t--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
for (i=2;i<=n;i++) if (n%i==0) // 当i是n的约数的时候找出n以内所有i的倍数进行标记
{
for (j=1;i*j<n;j++) a[i*j]=1;
}
int s=0;
for (i=1;i<n;i++) if (!a[i]) s++;
printf("%d\n",s);
}
}