问题描述
定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100! (100 的阶乘)有多少个约数。
数学
有一个数学公式:
任意一个正整数X都可以表示成若干质数乘积的形式:
即 X = p1α1 ∗ p2α2 …… ∗ pkαk
因而可以将2~100分解成若干质数
最后将所有质数可以组合出的数累加起来。
sum = (n1+1) ∗ (n2+1) ∗ …… ∗ (n99 + 1);
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
vector<int> a;//放入所有质数
int n[100];//记录每一个质数的数量
int gcd(int num){
if(num <= 1){
return false;
}
if(num == 2){
return true;
}
int flag = 1;
for(int i = 2; i <= sqrt(num); i ++){
if(num % i == 0){
return false;
}
}
return flag;
}
int main()
{
for(int i = 2; i <= 100; i ++){//查找2~100中所有的质数
if(gcd(i) == true){
a.push_back(i);
}
}
int len = a.size();
for(int i = 2; i <= 100; i ++){//将2~100的数分解成质数
int t = i;
for(int j = 0; j < len; j ++){
if(t % a[j] == 0 && t != 1){
n[a[j]] ++;
t /= a[j];
}
}
}
long long res = 1;
for(int i = 1; i <= 99; i ++){//计算出所有情况
res = res * (n[i] + 1);
}
cout << res << endl;
return 0;
}