刚开始是用晒素数 然后 在进行枚举 + 判断,结果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;
}