0
def is_divisible(num,prime=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]):
    for j in prime:
        if (num % j) == 0:
            return True
    return False

最初の部分

def find_primes(N):
    prime = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]
    primes = []
    n = range(2,N+1)
    for num in n:
        if is_divisible(num) is False:
            primes.append(num)
    return(prime+primes)

第二部

def brun(N):
    list = find_primes(N-1)
    list2 = find_primes(N)
    combs = []
    for x in list:
        for y in list2:
            if x - y ==2:
                combs.append((1/x)+(1/y))

print(brun(10000))

このプログラムを実行していますが、最終的に何も得られませんでした。何が問題なのかわかりません。助けてください

4

2 に答える 2

4

brunreturn ステートメントがないため、デフォルトでは を返しますNone。だからprint(brun(10000))印刷しNoneます。

編集:以下で述べたように、おそらくreturn combsの最後にステートメントが必要ですbrun。ただし、要素を含むcombsリストN(N-1)/2なので、すべてを印刷したいとは思いません。次のようなものを印刷したい場合があります

print(brun(10000)[-1])

の最後の要素を出力しcombsます。

于 2013-10-22T17:09:17.720 に答える
2

@ビルはあなたの質問に正しく答えました。しかし、少し時間を取って、より良いアルゴリズムを提案させてください。それはエラトステネスのふるいとして知られており、2000 年以上前にギリシャの数学者によって発明されました。アイデアは、最初にn未満のすべての数を可能な素数としてマークし、次に素数ごとに、その倍数をすべて非素数としてマークし、素数を収集することです。

def primes(n):
    sieve, ps = [True] * n, []
    for p in xrange(2, n):
        if sieve[p]:
            ps.append(p)
            for i in xrange(p*p, n, p):
                sieve[i] = False
    return ps

次に、 n未満の素数の和をと言って計算できますsum(primes(n))。素数を使ったプログラミングに興味がある場合は、私のブログでこのエッセイをお勧めします。

于 2013-10-22T17:27:00.323 に答える