阶乘约数题目描述:
方法:
任意一个正整数 X 都可以表示成若干个质数乘积的形式,即 X = p1α1 ∗ p2α2∗…* pkαk
约数个数=(a1 + 1)(a2 + 1)……(ak + 1)
代码:
// 答案39001250856960000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1e4;
int p[100];
int main(){
int n=100;
// 对阶乘数进行质数分解
for(int k=2;k<=100;k++){
int tmp = k;
for(int i=2;i<tmp;i++){
while(i!=tmp){
if(tmp%i==0){
tmp/=i;
p[i]++;
}
else break;
}
}
p[tmp]++;
}
// 汇总计算
long long ans=1;
for(int i=2;i<=100;i++)
if(p[i]) ans*=(1+p[i]);
cout<<ans<<endl;
return 0;
}

该博客探讨了如何计算一个正整数的约数个数,通过质因数分解方法,给出了一段C++代码实现。这段代码对100的阶乘进行质因数分解,并统计每个质数的指数,最终根据约数公式求得约数总数,答案为39001250856960000。

被折叠的 条评论
为什么被折叠?



