数学
来因式分解。
1
x
+
1
y
=
1
n
!
x
y
−
n
!
(
x
+
y
)
=
0
(
x
−
n
!
)
(
y
−
n
!
)
=
(
n
!
)
2
\frac1x+\frac1y=\frac1{n!}\\ xy-n!(x+y)=0\\ (x-n!)(y-n!)=(n!)^2
x1+y1=n!1xy−n!(x+y)=0(x−n!)(y−n!)=(n!)2
然后算
n
!
n!
n!的因数个数就好了。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
#define MOD 1000000007
using namespace std;
int n,t,p[N];
bool f[N];
void mk(){
memset(f,true,sizeof(f));
f[0]=f[1]=false;
for (int i=2;i<=n;i++){
if (f[i]) p[++t]=i;
for (int j=1;j<=t&&i*p[j]<=n;j++){
f[i*p[j]]=false;
if (i%p[j]==0) break;
}
}
}
int calc(int n,int p){
int sum=0; while (n) sum+=n/p,n/=p; return sum;
}
int main(){
scanf("%d",&n),mk(); int ans=1;
for (int i=1;i<=t;i++)
ans=((long long)ans*(calc(n,p[i])*2+1))%MOD;
return printf("%d\n",ans),0;
}