C - Factors of Factorial
Time limit : 2sec / Memory limit : 256MB
Score : 300 points
Problem Statement
You are given an integer N. Find the number of the positive divisors of N!, modulo 109+7.
Constraints
- 1≤N≤103
Input
The input is given from Standard Input in the following format:
N
Output
Print the number of the positive divisors of N!, modulo 109+7.
Sample Input 1
Copy
3
Sample Output 1
Copy
4
There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.
Sample Input 2
Copy
6
Sample Output 2
Copy
30
Sample Input 3
Copy
1000
Sample Output 3
Copy
972926972
解析:
由唯一分解定理可知,把2~N每个数分解质因数并统计每个质因数出现的个数,然后根据乘法原理即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int Max=1010;
int n,ans=1,tot;
int sum[Max],zhi[Max];
inline void pre()
{
zhi[++tot]=2;
for(int i=3;i<=1000;++i)
{
int x=0;
for(int j=2;j<=(int)sqrt(i);++j) if(!(i%j)){x=1;break;}
if(!x) zhi[++tot]=i;
}
}
signed main()
{
pre();
cin>>n;
for(int i=2;i<=n;i++)
{
int x=i;
for(int j=1;zhi[j]<=x&&x!=1&&j<=tot;j++)
while(!(x%zhi[j])) x/=zhi[j],sum[j]++;
}
for(int i=1;i<=tot;i++)
if(sum[i]) ans=(ans%mod*(sum[i]+1)%mod)%mod;
cout<<ans;
return 0;
}