階乘約數
阿新 • • 發佈:2021-02-06
技術標籤:Python
【問題描述】
定義階乘 n! = 1 × 2 × 3 × · · · × n。
請問 100! (100 的階乘)有多少個約數。
【答案提交】
這是一道結果填空的題,你只需要算出結果後提交即可。
本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。
一開始並不知道所有約數公式怎麼求:
一個數的約數個數就是它的不同質因數的個數 + 1 再連乘的結果數。
最後還是找到別人解析做的:
n = 100
p = [2]
for i in range(3, n + 1):
j = 2
while j < i:
if i % j == 0:
break
j += 1
else:
p.append(i)
m = {}
for i in p:
m[i] = 1 # 每個質數初始為 1,代表不選這個質數的可能。
for i in range(2, n + 1): # 遍歷 [2, 100]
x = i
for j in p: # 遍歷質數,將每個被乘數都質因數分解一下。
# (比如 6 分解成 2*3 ,12 分解成 2*2*3)
if j > x:
break
while x % j == 0:
x //= j
# 讓對應的質數個數 + 1
m[j] += 1
s = 1
# 所有質因子的個數相乘,就是約數個數了。
for i in m.values():
s *= i
print(s)