2136问题主要因为时间,所以在遍历计算是不是素数的同时计算他的最大素数,也就是每一个素数都计算他的倍数,这样不用计算素数常用循环函数,同时求素数时候也不用再次计算
问题二:菜鸡不懂为啥这两个时间差这么多,但就是这样
printf("%d\n", pri[n]);
//cout<<pri[n]<<endl;
答案
#include <iostream>
using namespace std;
const int N = 1000000;
int pri[N] = {0};
int main() {
int n;
int j = 0;
for (int i = 2; i < N; ++i) {
if (!pri[i]) {
++j;
for (int k = i; k < N; k += i) {
pri[k] = j;
}
}
}
int ans;
while (scanf("%d", &n)!=EOF) {
printf("%d\n", pri[n]);
//cout<<pri[n]<<endl;
}
return 0;
}