Problem Statement
int mod=1e9+7;
int main()
{
int n,i,x,j;
int a[10005];
scanf("%d",&n);
memset(a,0,sizeof(a));
for(i=2;i<=n;i++)
{
x=i;
for(j=2;j<=x;j++)
{
while(x%j==0)
{
a[j]++;
x/=j;
}
}
if(x!=1) a[x]++;
}
long long sum;
sum=1;
for(i=1;i<=n;i++)
{
if(a[i]!=0)
sum=(sum*(a[i]+1))%mod;
}
printf("%lld\n",sum);
return 0;
}
You are given an integer N. Find the number of the positive divisors of N!, modulo 109+7.
Constraints- 1≤N≤103
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 13Sample Output 1
4
There are four divisors of 3! =6: 1, 2, 3 and 6. Thus, the output should be 4.
Sample Input 26Sample Output 2
30Sample Input 3
1000Sample Output 3
972926972
N!=2^a*3^b*5^c*7^d......
所以约数个数为(a+1)*(b+1)*(c+1).........
AC:
#include<stdio.h>
#include<string.h>int mod=1e9+7;
int main()
{
int n,i,x,j;
int a[10005];
scanf("%d",&n);
memset(a,0,sizeof(a));
for(i=2;i<=n;i++)
{
x=i;
for(j=2;j<=x;j++)
{
while(x%j==0)
{
a[j]++;
x/=j;
}
}
if(x!=1) a[x]++;
}
long long sum;
sum=1;
for(i=1;i<=n;i++)
{
if(a[i]!=0)
sum=(sum*(a[i]+1))%mod;
}
printf("%lld\n",sum);
return 0;
}