[Pythhon] 탄성체로 소수를 체질하다

5728 단어 Python3Python

파이톤으로 C# 쓴 거 써봤어요.


어제의 항목에 쓰인 C#의 코드가 파이톤이면 어떻게 되는지 다시 한번 짚어봤다.

파이썬 코드


※ 2018/4/24 수정
변수 이름 'dict' 를 'dic' 으로 변경합니다.("dict"는 내장 함수 이름으로 변수 이름으로 적합하지 않음)
fr = 1
to = 200

# ディクショナリ初期化
# keyは整数、
# valueはステータス(0:判定前、1:消した(素数でない)、2:○をつけた(素数))
dic = {}
for i in range(1, to + 1):
    dic[i] = 0

# 単数の1を消す   
dic[1] = 1

prime_number = 2

# 素数の2乗が範囲内のところまでループ
while prime_number * prime_number < to:
    # 未判定の最小値を素数とする
    prime_number = min([item[0] for item in dic.items() if item[1] == 0])
    # ○をつけた(2を立てる)
    dic[prime_number] = 2

    # 未判定の値のうち、素数の倍数のリスト取得
    target_numbers = [item[0] for item in dic.items() if item[1] == 0 and item[0] % prime_number == 0]
    for n in target_numbers:
        # 合成数として消す(1を立てる)
        dic[n] = 1

# 残った値は全部素数として○をつける(2を立てる)
remain_numbers = [item[0] for item in dic.items() if item[1] == 0]
for n in remain_numbers:
    dic[n] = 2

# 素数と判定された値を出力
prime_numbers = [item[0] for item in dic.items() if item[1] == 2]
print (prime_numbers)

결과 내보내기


출력은 다음과 같습니다.OK!

C#에서 Link to Object를 계속 사용하고 있습니다.
파이썬이면 귀찮을 수도 있는데?그렇게 생각하지만 그렇지는 않아요.
리스트 내포는 매우 편리함을 나타낸다.

좋은 웹페이지 즐겨찾기