質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

463閲覧

素数を求めるプログラムを作りたい

masimarow

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/04/07 03:17

前提・実現したいこと

素数を求めるプログラムを書いたのですが

発生している問題・エラーメッセージ

実行した結果、なぜか4が入ってしまいました。また、100までとしたはずが101まで出てしまいました。
なぜなのか、またどうしたら良いか、ご教示願えませんでしょうか?

また、勉強中なので他にこのコードに対する意見やアドバイスがあれば書いていただければ嬉しいです。
よろしくお願いいたします。

該当のソースコード

python3.x

1 2i = 3 3imax = 2 4sosu=[2] 5while i <= 100 : #iを100 まで繰り返す 6 imax=2 7 while i/2 > imax : #2からiの半分までの数(imax)で割った余りを調べる 8 if i%imax == 0 : #余り0なら次のi 9 i += 1 10 imax=2 11 else : #そうでないなら次のimax 12 imax += 1 13 sosu.append(i) 14 i += 1 15 16print(sosu)

【結果】
[2, 3, 4, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

pp.py

python3

1import math 2 3def is_prime(n, primes): 4 # この時点でわかっている素数 で sqet(n) 以下の数を試していく 5 max_p = int(math.sqrt(n)) 6 for p in primes: 7 if p > max_p: 8 break 9 if n % p == 0: 10 return False 11 return True 12 13MAX = 100 14# 3, 5, 7 ... のようにして MAX 以下の奇数だけを試していく 15primes = [2] 16for p in range(3, MAX + 1, 2): 17 if is_prime(p, primes): 18 primes.append(p) 19 20print(primes)

実行例:
イメージ説明

投稿2020/04/07 14:34

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masimarow

2020/04/07 14:57

なるほど!勉強になりました!ありがとうございます!
guest

0

ベストアンサー

なぜか4が入ってしまいました。

i=4の時にどういう処理をされるかを読めば、素数と判定されることが分かります。
while 4/2 > 2:の条件が偽なので、一度もwhile内を実行せずに、sosu.append(4)が実行されます。

100までとしたはずが101まで出てしまいました。

i <= 100を判定した後でi+=1しているからですね。

またどうしたら良いか、

場当たり的にコードを書かず、トップダウンで設計するといいです。

Python

1sosu = [2] 2for i in range(3,101): 3 if is_sosu(i): 4 sosu.append(i)

のようにして、True/Falseを返すようにis_sosu関数を作ってください。
range(3,101,2)とすれば最初から偶数を除外できます。

投稿2020/04/07 03:32

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masimarow

2020/04/07 03:38

迅速な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問