题目描述
在线平台
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
定义阶乘 n! = 1 × 2 × 3 × · · · × n
n!=1×2×3×⋅⋅⋅×n。
请问 100!(100的阶乘)有多少个正约数。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
答案
39001250856960000
解题思路
任意一个大于1的正整数n可以分解质因数:
n
=
p
1
a
1
×
p
2
a
2
×
p
3
a
3
×
.
.
.
.
×
p
k
a
k
n=p_1^{a1}×p_2^{a2}×p_3^{a3}×....×p_k^{ak}
n=p1a1×p2a2×p3a3×....×pkak
则n的约数的个数:
(
a
1
+
1
)
×
(
a
2
+
1
)
×
(
a
3
+
1
)
×
.
.
.
×
(
a
k
+
1
)
(a_1+1)×(a_2+1)×(a_3+1)×...×(a_k+1)
(a1+1)×(a2+1)×(a3+1)×...×(ak+1)
100!暴力求解超时,我们可以先循环1-100,对i分别做因数分解,这些因数分别+1后累积起来,就得到结果了
代码
#include <iostream>
using namespace std;
typedef long long ll;
int a[102];
int main()
{
ll ans=1;
for(int i=2;i<=100;i++){ //n*1=n,从2开始因数分解
int t=i;
for(int p=2;p*p<=i;p++){ //分解因数
while(t%p==0){
a[p]++; //因数+1
t/=p;
}
}
a[t]++;//自己本身也是一个因数,所以要+1
}
for(int i=2;i<=100;i++){
ans*=a[i]+1;
}
cout<<ans;
return 0;
}