牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

『ノン・プログラマのためのPHP入門』の素数を表示するスクリプトをPythonでやってみた

ノン・プログラマのための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]