l = int(input())
first = 2
cnt = 0
i = 3
while i < l+1:
j = 2
while j <= i**0.5:
if i % j == 0:
break
if j == 2:
j += 1
else:
j += 2
else:
if i - first == 2:
cnt += 1
first = i
i += 2
print(cnt)
python这语言的缺点之一:运行速度慢
//我试的,用math.sqet()依然超时
换成c/c++就可以了
有用,之前有误
http://blog.csdn.net/stephen_wong/article/details/26139309
存在大量重复计算。你先把题意范围内的素数全算出来,在比较相邻的多好
#include
int main(void)
{
int max;
scanf("%d",&max);
int a[max];
a[0]=2;
int output=0;
int index=1;
int i,j;
for (i = 2; i <= max; i++) {
if ((i>2)&&(i%2==0)) {
continue;
}
for ( j = i-1; j >0; j--) {
if (j==1) {
a[index]=i;
index++;
}
if (i%j==0) {
break;
}
}
}
for (i = 0; i < index-1; i++) {
if ((a[i+1]-a[i])==2) {
output++;
}
}
printf("%d",output);
return 0;
}
我也是最后一个测试点超时,这是我的C代码
超时的原因是因为找素数的方法不够好,把while j <= i**0.5:,改成开根号就行了。
追加,我的是用C语言写的,本来也是超时。改成kaige开根号就可以了,但是最后一个点运行时间还是比较长。