请教一下各位!
这个我觉得思路没错呀,为什么显示超时呢?
ps用蓝桥杯的题库做的题
一开始直接暴力求解,直接跑不出来,参考答案之后,发现他寻找素数的时候不是返回这个数,而是返回T/F(1/0),是素数这个位置是1,不是这个位置是0,巧思。
def init_num():
global tot
for i in range(2, N):
if dp[i] == 1:
continue
prim[tot] = i # 记录N以内的所有素数
tot += 1
j = i
while i * j < N:
dp[i * j] = 1 # 不是素数的位置标记1
j += 1
N = 1000010 # N的大小自己可以估计一下 想想也应该挺大的 多试几次
dp = [1, 1] + [ 0] * N
tot = 0
dif = 1
prim = [0] * N
init_num()
# print(dp[:100])
# print(prim[:100])
print(tot)
while dif * 10 < N:
for j in range(tot):
flag, temp = True, prim[j]
for k in range(1, 10): # temp后边是否再有9个满足等差条件的素数
if temp + dif >= N or dp[temp + dif] == 1:
flag = False
break
else:
temp += dif
if flag == True:
print(dif, prim[j])
exit()
dif += 1
几个注意点:
①判断素数少判断一半的方法:i*i>x 就不用看了
②19行 i+d*j别忘了这个乘以j 不然就一直是一个数字在循环了
③ try except 是为了防止X[i+d*j]出现越界
版权声明:本文为CSDN博主「衍ちゃん」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzzyr_yan/article/details/122671804