蓝桥杯11届国B 约数
题目描述
定义阶乘 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;
}