题目描述
定义阶乘 n!=1×2×3×⋅⋅⋅×n。
请问 100! (100 的阶乘)有多少个正约数
100!
是所有从 1 到 100 的数的乘积,因此:
质数 j
在 100!
中的总指数 = 质数 j
在 1
中的指数 + 质数 j
在 2
中的指数 + ... + 质数 j
在 100
中的指数
#include<iostream>
#include<cmath>
using namespace std;
int a[110]; //存储每个质约数的指数
long long ans=1;
int prime(int x)
{
if(x<2) return 0;
if(x==2) return 1;
for(int i=2; i<=sqrt(x); ++i)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
for(int i=1; i<=100; ++i) //枚举1-100
{
for(int j=2; j<=i; ++j) //枚举i的约数
{
if(i%j==0 && prime(j))
{
//计算质数j在i中的指数
int temp=i;
int cnt=0;
while(1)
{
if(temp%j==0)
{
cnt++;
temp/=j;
}
else break;
}
a[j] += cnt;
}
}
}
//一个正整数n的正约数等于分解定理分解的所有质约数的幂次+1的累乘
for(int i=1; i<=100; ++i)
{
ans *= (a[i]+1);
}
cout<<ans;
return 0;
}