让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
代码:
import math
def sushu(x):
a = math.sqrt(x)
b = math.floor(a)
for i in range(2,b + 1):
if(x % i == 0):
a = 0
break
if a == 0:
return False
return True
number = 0
j = 3
num_max = eval(input())
for i in range(3,num_max + 1,2):
if sushu(i):
if i - j == 2:
number += 1
j = i
print(number)
说明:
这个题是真的真心坑,最后一个测试点总是容易出现运行超时的问题,但是在自己的电脑上运行就不会,这时候就需要我们去优化自己的算法,将计算机的资料合理的应用,我之前写的代码有很多数字都需要重复运算,但是很多都是无用的,例如在测试素数的时候我们知道偶数一定不会是素数(可以被2整除),所以我们在筛选的时候就可以将range的开头设置为3,然后将步长设置为2,这样保证了我们的测试数一定都是奇数。从而避免了运算超时这样尴尬的事情发生。