题意
100的阶乘有多少个约数?
唯一分解定理
唯一分解定理:N = p1a1*p2a2p3^a3 ... *pn^an(其中p1、p2、... pn为N的因子,a1、a2、... 、an分别为因子的指数)
求N的因子个数:sum=(1 + a1)*(1 + a2)*(1 + a3)*...*(1 + an)
本题答案是:39001250856960000
类似题见:https://www.cnblogs.com/OFSHK/p/11329177.html
AC代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
bool book[110];
int p[110],a[110],cnt=0;
//180=2*2*3*3*5=2^2 * 3^2 *5
//180的正约数个数=(1+2)(1+2)*(1+1)=18
//void init() // 求100以内的所有素数(包括100)
//{
// for(int i=1; i<=100; i++)
// {
// if(i==1) continue;
// if(!book[i])
// {
// p[cnt++]=i;
// for(int j=i+i; j<=100; j+=i)
// book[j]=1;
// }
// }
//}
//ll yinzi(int a)//求N的因子个数sum=(1 + a1)*(1 + a2)*(1 + a3)*...*(1 + an);
//{
// ll sum=1;
// for(int i=0; i<cnt&&(p[i]*p[i]<=a); i++)
// {
// if(p[i]>a) break;
// if(a%p[i]==0)
// {
// ll x=0;
// while(a%p[i]==0)
// a/=p[i],x++;
// sum*=(1+x);
// }
// }
// if(a>1)//说明还剩有1个素数因子没有被算入,根据公式可得
// sum=sum*(1+1);
// return sum;
//}
void yinzi()
{
for(int i=2; i<=100; i++)
{
int n=i;
for(int j=2; j<=n/j; j++)
{
while(n%j==0)
a[j]++,n/=j;
}
if(n>1) a[n]++;
}
}
int main()
{
// init();
yinzi();
ll ans=1;
for(int i=2; i<=100; i++)
{
// ans*=yinzi(i);
if(a[i]) ans=ans*(a[i]+1);
}
cout<<ans<<endl;
return 0;
}