定义阶乘 n! = 1 × 2 × 3 × · · · × nn!=1×2×3×⋅⋅⋅×n。
请问 100! (100 的阶乘)有多少个正约数。
任何一个正整数都有唯一的质因数分解
N
=
p
r
i
m
e
1
a
1
∗
p
r
i
m
e
2
a
2
∗
…
∗
p
r
i
m
e
n
a
n
N = prime_1^{a1}*prime_2^{a2}*\ldots*prime_n^{an}
N=prime1a1∗prime2a2∗…∗primenan
则
N
N
N的约数个数:
(
a
1
+
1
)
∗
(
a
2
+
1
)
∗
…
∗
(
a
n
+
1
)
(a_1+1)*(a_2+1)*\ldots*(a_n+1)
(a1+1)∗(a2+1)∗…∗(an+1)
对于
1
∼
100
1\sim100
1∼100每个数分别求其质因数分解,相加就可以求出所有质因数了
#include<iostream>
#include<cstdio>
using namespace std;
int f[105],prime[105];
bool check(int k){
for(int i = 2; i < k; i ++)
if(k % i == 0) return 0;
return 1;
}
void Prime(int k){
int i = 1;
while(k != 1){
while(k % prime[i] != 0) i ++;
while(k % prime[i] == 0){
f[prime[i]] ++;
k /= prime[i];
}
}
}
int main(){
int top = 1;
for(int i = 2; i <= 100; i ++)
if(check(i)) prime[top ++] = i;
for(int i = 1; i <= top; i ++)
cout<<prime[i]<<" ";
for(int i = 2; i <= 100; i ++)
Prime(i);
long long ans = 1;
for(int i = 2; i <= 100; i ++)
if(f[i]) ans *= f[i] + 1;
cout<<ans;
return 0;
}