练习的时候做这道题,第一思路是打一个表,但是。。。
我的想法 :
将所有p(i)==1,且i不可以被表示为a * b,p(a) == 1 且 b != 1的所有i加入一个数组。若一个数能被其中任意一个数整除则这个数不能报。外层循环遍历1-1e7,内层遍历上面的含i的数组(i边找边加入),加上点小优化只拿了50.
for(int i = 1; i <= n; i++) {
if(p(i)) {
b[i] = true;
f = true;
for(int j = 1; j <= len; j++) {
if(i % a[j] == 0) {
f = false;
break;
}
}
if(f) {
a[++len] = i;
}
} else {
f = true;
for(int j = 1; j <= len; j++) {
if(i % a[j] == 0) {
f = false;
break;
}
}
if(!f) {
b[i] = true;
} else {
c[++len0] = i;
}
}
}
题解的做法:找到所有p(i)==1的数,将其所有倍数记录为不可报
我的疑问:我一开始想的思路是题解的那种,但我担心超时,就换了一种思路,结果。。。请问为什么我的会超时但题解的不会啊?