『ノン・プログラマのためのPHP入門 10日間コース』82ページから
素数チェックの関数内のアルゴリズム
1〜100まで繰り返して表示する
1以下の場合は次の値をチェックする
2の場合は素数なので表示して、次の値をチェックする
偶数の場合は素数ではないので、次の値をチェックする
今の値は1と今の値以下の自然数では割れてはいけない
割れてしまったら素数ではないので次の値をチェックする
これをPythonでやってみた
#!/usr/local/bin/python # *-# -*- coding: utf-8 -*- def sosu(num): slist = [] for i in range(1,num+1): if 1 < i: if i == 2: slist.append(i) elif (i % 2) != 0: flag = 0 for j in range(3,i): if i%j == 0: flag = 1 break if flag == 0: slist.append(i) return slist if __name__ == "__main__": print sosu(100)
とりあえずできたけど、う〜ん(´・ω・`)
ちょっとコードを改良してみた
#!/usr/local/bin/python # *-# -*- coding: utf-8 -*- def sosu(num): slist = [] for i in range(1, num+1): if i == 2: slist.append(i) elif 1 < i and (i % 2) != 0: for j in range(3,i): if (i % j) == 0: break else: slist.append(i) return slist if __name__ == "__main__": print sosu(100)
微妙に修正
#!/usr/bin/env python # *-# -*- coding: utf-8 -*- def sosu(min, max): slist = [] for i in range(min, max): if i == 2: slist = [2] if 3 <= i and i % 2 != 0: for j in range(3,i): if i % j == 0: break else: slist.append(i) return slist if __name__ == "__main__": print sosu(1, 101)
もうちょっとなんとかなる?(´・ω・`)
結果
[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]