Pythonで理解する蟻本「2-6 素数判定」(p.110)
この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「2-6 素数判定」(p.110)
のコードをPythonで書き直したものとなっています。
入力
入力例
295927
素数判定(O(√n))
# 素数判定O(√n)
def is_prime(n):
i = 2
while i * i <= n:
if n % i == 0:
return False
i += 1
return n != 1 # 1の場合は例外
実行結果
False
約数の列挙(O(√n))
# 約数の列挙O(√n)
def divisor(n):
res = []
i = 1
while i * i <= n:
if n % i == 0:
res.append(i)
if i != n // i:
res.append(n // i)
i += 1
return res
実行結果
[1, 295927, 541, 547]
素因数分解(O(√n))
# 素因数分解O(√n)
def prime_factor(n):
res = {}
i = 2
while i * i <= n:
while n % i == 0:
if not i in res:
res[i] = 0
res[i] += 1
n //= i
i += 1
if n != 1:
res[n] = 1
return res
実行結果
{541: 1, 547: 1}