Description
给定数字N,有多少正整数对(x,y)满足1/x+1/y=1/N!
Format
Input
一个正整数N,N<=1000000
Output
一个整数并对10^9+7取模
Samples
输入数据 1
2
Copy
输出数据 1
3
Copy
hint //有三个整数对(3,6),(4,4),(6,3)满足题意
思路
我们可以发现这是道数学题,就是求n!*n!的因子数。
为什么这样说呢?
因为我们可以这样看这道题:x,y必定是大于n!的,而我们假设y=n!+k。
那么
由此,可知求有多少正整数对(x,y)满足1/x+1/y=1/N!,就是求n!*n!的因子数!
代码见下:
#include<bits/stdc++.h>
using namespace std;
long long int d=1e7;
bool f[10000000];
long long int z[10000000],sd,g[10000000],o[10000000];
long long int n,m,mo=1e9+7;
long long int s;
void ss(){
for(int i=2;i<=n;i++){
if(f[i]!=1){
z[sd+1]=i;
sd++;
g[i]=sd;
}
for(int j=1;j<=sd;j++){
if(z[j]*i>n) break;
f[z[j]*i]=1;
g[z[j]*i]=j;
if(i%z[j]==0) break;
}
}
}
int main(){
cin>>n;
ss();
for(int i=2;i<=n;i++){
for(int j=i;j!=1;j/=z[g[j]]){
o[g[j]]++;
}
}
for(int i=1;i<=sd;i++){
o[i]*=2;
}
s=1;
for(int i=1;i<=n;i++){
s=s*(o[i]+1)%mo;
}
cout<<s;
}