题目描述
求方程 1/X+1/Y=1/(N!) 的正整数解的组数,其中N≤10^6。
解的组数,应模1e9+7。
输入格式:
输入一个整数N
输出格式:
输出答案
输入样例#1:
1439
输出样例
102426508
#include<bits/stdc++.h>
#define read() freopen("input.txt","r",stdin);
#define write() freopen("output.txt","w",stdout);
using namespace std;
#define ll long long
#define mod 1000000007
const int maxn = 1e6+10;
int prime[maxn],v[maxn],cnt=0;
ll ans=1,sum[maxn];
void primes(int n){
for( int i=2; i<=n; i++ ){
if(!v[i]) prime[++cnt]=i,v[i]=i;
for( int j=1; j<=cnt; j++ ){
if(prime[j]*i>n||prime[j]>v[i]) break;
v[i*prime[j]]=prime[j];
}
}
}
int main()
{
int n;scanf("%d",&n);
primes(n);
for( int i=1; i<=cnt; i++ ){
sum[i]=0;
for( ll j=prime[i]; j<=n; j*=prime[i]) sum[i]+=n/j;
sum[i]%=mod;
}
for( int i=1; i<=cnt; i++ ){
ans=(ans*(2*sum[i]+1))%mod;
}
printf("%lld",ans);
return 0;
}