#はじめに
よくある話題ですが、
加算していく様子が少し面白かったので記事にしてみました。
#コード
solve.py
import math
def divSum(num) :
result = 0
i = 2
while i*i <= num:
if (num % i == 0):
if (i == (num // i)):
result += i
else :
result += i + num//i
i += 1
return int(1 + result + num)
num = 12
print (divSum(num))
num = 9
print(divSum(num))
# 28
# 13
#説明
num = 12のとき、12の約数は1, 2, 3, 4, 6, 12です。
(2, 6), (3, 4)といった具合で(i, num/i)のペアを作って一度に加算しています。
最後のreturnは問題の条件によって
example.py
return int(1 + result)
のように調整できます。
num = 9のとき、9の約数は1, 3, 9ですが、
先ほどの様にペアを作ってしまうと、(3, 3)となって
3を2回カウントするので、片方だけ加算する必要があります。
#補足
コメント欄で@konandoiruasaさんに
高速なプログラムを教えていただきました。
ありがとうございます🙇♂️