1

秋にコンピューター サイエンス プログラムを開始する予定で、開始する少し前にプログラミングの腕を上げようとしています。

私は MIT OCW 6.0 の問題に取り組んでいますが、最初は 1000 番目の素数を生成することです。明らかに、私は自分のコードを生成したいので、私のロジックがどこで間違っているのか疑問に思っています。

counter = 1
primes = [2]
n = 3
while counter < 1000:
    for i in range(2, n):
        if n % i == 0:
        break
        else:
            primes.append(n)
            counter = counter + 1
    n = n + 1

print primes

皆さんすごいので、ここですべての行を説明することはしませんが、私のロジックの要点は、このループを n から開始することです。n が素数の場合、リストに追加し、カウンターに 1 を追加します。そうでない場合は、次の数に進みます。最後に、1000 番目の素数で終わるリストを出力します。

ほら、これが「ブルートフォース」であることは知っていますし、そこにはふるいがあり、より複雑なロジックがあることも知っていますが、私はこれがこのように機能することを望んでいます. 現在、多くの数字が繰り返されており、1000番目の素数にはほど遠い.

みんなありがとう。これは私の最初の質問ですが、今後も出てくると確信しています。

4

2 に答える 2

0

いくつかの間違いがありました。ここにあなたのコードの私のバージョンがあります

counter = 1
primes = [2]
n = 3
while counter < 1000:
    flag = 0
    for i in range(2, n):
        if n % i == 0:
            flag = 1
            break
    if flag==0:
        primes.append(n)
        counter = counter + 1
    n = n + 1

print primes

ここで aboce コードを実行できますhttp://codebunk.com/bunk#-Iy8aps3Zy7woREB64VF

編集: 2 から n までの数字で割り切れるかどうかを確認する必要はありません。多分それを2からn ^ 0.5に変更します

于 2013-06-28T07:11:10.200 に答える