約数列挙のアルゴリズムについての備忘録です。
の方法
ポイントは2点です。
- 確認する整数は
まで が の約数ならば、 も約数
def calc(N):
res = []
for i in range(1,N+1):
#√N 以下だけ確認
if i*i > N:
break
#iがNの約数でない場合
if N%i !=0:
continue
else:
res.append(i)
#N÷i もNの約数
if N//i != i:
res.append(N//i)
res.sort()
return res
print(calc(12)) #[1, 2, 3, 4, 6, 12]
12の場合を考えてみます。
i=1
は12の約数。 さらに、12÷1=12も約数。i=2
は12の約数。さらに、12÷2=6 も約数。i=3
は12の約数。さらに、12÷2=4も約数。i=4
は、i*i=16>12
より、for文を抜ける。
よって、約数は [1, 2, 3, 4, 6, 12]
と求められます。
単純なアルゴリズム
正整数
res = []
for x in range(1, N+1):
if N%x == 0:
res.append(x)
まとめ
参考にしたサイト
約数列挙のアルゴリズム | アルゴ式

AtCoder 版!マスター・オブ・整数 (素因数分解編) - Qiita
お久しぶりです!アルゴリズムと整数好きのけんちょんです!今回は俗に「数学ゲー」と呼ばれるタイプの問題のうち、整数について語ります。【他シリーズ】AtCoder 版!マスター・オブ・整数 (最…