AtCoder - 2286
题目大意:
本题的大意是给出一个数值N,要求求出N的阶乘的正除数的数量
正除数:6的正除数为1 2 3 6 数量为4
分析:
一个数的正除数的数量等于这个数的 各个素因子的(指数+1)累乘
这个题要求求出N!的正除数的数量,所以把从2-N每个数的素因子的数量累加到一起 最后累乘求值
AC代码:
#include <iostream>
#include <cstring>
#include <cmath>
#define LL long long
using namespace std;
bool Prime[1005];
LL Cnt[1005]={0};//记录每个素数的次数
LL MOD=1e9+7;
int main(){
memset(Prime,false,sizeof(Prime));
for(int i=2;i<=sqrt(1005);i++){
if(!Prime[i]){
for(int j=i*i;j<=1005;j+=i){
Prime[j]=true;
}
}
}
int n;
cin>>n;
for(int i=2;i<=n;i++){
for(int j=2; j<=i ; j++){
if(!Prime[j]){
int temp=i;
while(temp%j==0){
Cnt[j]++;
temp /= j;
}
}
}
}
LL ans=1;
for(int i=2;i<=1000;i++){
if(Cnt[i]){
ans = ans*(Cnt[i]+1) % MOD;
}
}
cout<<ans<<endl;
return 0;
}