0

この Project Euler の質問には、少し困惑しています。

これが私が正しいと思った私の解決策です:

import math
start = time.time()
def check_prime(a, b, n):
    num = n**2 + a * n + b
    mod = 3
    if num >= 0:
        check = int(math.sqrt(num))
    else:
        return False
    while mod <= check:
        if num % mod == 0:
            return False
        mod += 2
    return True
def main():
    n = 0
    max_n = 0
    for a in xrange(-1000, 1000):
        for b in xrange(-1000, 1000):
            while check_prime(a, b, n):
                n += 1
                if n > max_n:
                    max_n = n
                    product = a * b
        n = 0
    print max_n, product
    print time.time() - start
if __name__ == '__main__':
    main()

これにより、実際のリストが 71 しかない 376 の連続したプライム リストが得られます。質問を理解するのが難しいと思います。それが例として与えられたものであるため、最長のプライムリストは少なくとも80である必要はありませんか? 私のプログラムは 71 のリストの 2 つの項の積を計算しますが、376 まで上がり続けます。

私が見落としている質問に何かありますか?

4

1 に答える 1

2

それが例として与えられたものであるため、最長のプライムリストは少なくとも80である必要はありませんか?

問題文で与えられた式はn² 79n + 1601、そうa = 79そしてb = 1601 > 1000です。したがって、連続する素数の数が 80 を超えるとは思わないでください。実際、連続する素数の正しい数は 71 です。productあとは、自分が正しいことを確認する必要があります。

ヒント:

の値a * bは負です。

于 2013-07-16T15:51:17.070 に答える