1007 素数对猜想 (20 分)

让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<10​5​​),请计算不超过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,这样保证了我们的测试数一定都是奇数。从而避免了运算超时这样尴尬的事情发生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章