刚开始是用晒素数 然后 在进行枚举 + 判断,结果T了3发。。开始思考。最后突然明白。把晒素数的方法改下就可以了。
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int const MAX = 1000010; int s[MAX],prime[MAX]; void Judge(){ memset(prime,0,sizeof(prime)); s[1] = 0; int temp = 1; for(int i = 2;i < MAX;i++){ if(!prime[i]){ s[i] = temp; for(int j = i;j < MAX;j += i){ prime[j] = 1; s[j] = temp; } temp++; } } } int main(){ Judge(); int n; while(~scanf("%d",&n)){ printf("%d\n",s[n]); } return 0; }