题目大意:求出比给出数小的互质的质数个数。
题解:直接用筛法求素数,稍微改编一下,将原先的布尔数组变为数组用来记录信息就可以了。
注意点:大的数组定义要放在程序的开头,不要放在main里面,不然会栈溢出。
#include <cstdio> #define max 1000000 int prim[max]={0}; int main() { int n; int cnt=1; for(int i=2; i<max; ++i) { if(prim[i]) continue; for(int j=i; j<max; j+=i) prim[j]=cnt; cnt++; } while(scanf("%d",&n)!=EOF) printf("%d ",prim[n]); return 0; }