【问题描述】
定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100! (100 的阶乘)有多少个约数。
正确答案:
39001250856960000
思路:
其实就是把从那些因子中挑出来问你最多能组成多少个数。
为了防止2*3=6的重复计算,我们不能直接挑,所以要先用唯一分解定理分解成
素因子乘积的形式
如:5!=1*2*3*4*5=23*31*51;
所以现在的情况变成了:2有4种选择(0、1、2、3个),3有2种选择(0、1个)
,5有2种选择(0、1个).即每个素因子的选择个数是其幂次+1。
所以对于100!的答案就是把2-100的每一个数进行分解,记录下每一个素因子
的个数,然后+1乘起来即可
#include<bits/stdc++.h>
using namespace std;
int flag[105];
int main()
{
int i;
for (int i = 2; i <= 100; i++)
{
int tmp = i;
for (int j = 2; j <= tmp/j; j++)
{
while (tmp % j == 0)
{
flag[j]++;
tmp /= j;
}
}
if(tmp>1)flag[tmp]++;
}
long long ans = 1;
for (int i = 1; i <= 100; i++)
{
ans = ans*(flag[i] + 1);
}
cout << ans;
return 0;
}