一个python问题

请教一下各位!
这个我觉得思路没错呀,为什么显示超时呢?
ps用蓝桥杯的题库做的题

img

img

img

一开始直接暴力求解,直接跑不出来,参考答案之后,发现他寻找素数的时候不是返回这个数,而是返回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