AcWing 871. 约数之和
原题链接
简单
作者:
皓首不倦
,
2020-09-03 10:36:07
,
所有人可见
,
阅读 362
from collections import Counter
import math
MOD = 1000000007
n = int(input()) # n是被分解的数值的个数
c = Counter()
for _ in range(n):
val = int(input()) # val是被分解的数值
for i in range(2, int(math.sqrt(val)) + 1):
if val % i == 0:
cnt = 0
while val % i == 0:
val //= i
cnt += 1
#print(i, cnt) # 打印底数和次幂
c[i] += cnt
if val == 1:
break
# 特判最后可能剩下的大于sqrt(val)的最大的质因子
if val != 1:
#print(val, 1)
c[val] += 1
ans = 1
for k, v in c.items():
ans *= (k**(v+1)-1) // (k-1)
print(ans % MOD)