Liquidsのロゴ Liquids

0

素数判定の実装【Python】

Python

単純に自身より小さな数で割ってみて、割れないばあいは素数と判定します。

def isPrime(n):
    for i in range(2, n):
        if n%i==0:
            return False
    if n==1:
        return False

    return True

for i in range(2,100):
    print(i,':',isPrime(i))

以下の改善を施した試し割り法の実装を紹介します。

  • sqrt(n)までしか判定しなくて良い
  • 偶数は必ず割り切れるため、2以外の偶数は必ず素数ではない(奇数のみ判定する)
import math

def isPrime(n):
    for i in range(3, math.floor(math.sqrt(n))+1, 2):
        if n%i==0:
            return False

    if n==2:
        return True
    if n%2==0:
        return False
    if n==1:
        return False

    return True

for i in range(2,100):
    print(i,':',isPrime(i))

エラトステネスの篩の詳細はこちらをご覧ください

以下、Pythonでのエラトステネスの篩の実装を紹介します。

import math

# n以下の素数判定のリストを返す
def eratosthenes(n):
    prime_list = [False, False] + [True]*(n-1)
    for i in range(2, math.floor(math.sqrt(n))+1):
        if not prime_list[i]:
            continue
        for j in range(i*2, n+1, i):
            prime_list[j] = False
    return prime_list

n = 10
l = eratosthenes(n)
for i in range(n+1):
    print(i,':',l[i])

# 0 : False
# 1 : False
# 2 : True
# 3 : True
# 4 : False
# 5 : True
# 6 : False
# 7 : True
# 8 : False
# 9 : False
# 10 : False
Liquidsのロゴ Liquids

Liquidsは誰でも投稿・編集ができる技術Wikiコミュニティ📝です。

あなたもLiquidsで技術Wikiを
書いてみませんか?