1)如果直接通过这个式子很明显是无法求得,我们应该要给这个式子化简:
1.
x
+
y
x
∗
y
=
1
n
!
{x+y\over{x*y}}={1\over{n!}}
x∗yx+y=n!1
2.
(
x
+
y
)
∗
n
!
=
x
∗
y
(x+y)*n!=x*y
(x+y)∗n!=x∗y
3.
x
=
y
∗
n
!
(
y
−
n
!
)
x={y*n!\over{(y-n!)}}
x=(y−n!)y∗n!
4.
x
=
(
y
−
n
!
+
n
!
)
∗
n
!
(
y
−
n
!
)
x={(y-n!+n!)*n!\over{(y-n!)}}
x=(y−n!)(y−n!+n!)∗n!
5.
x
=
n
!
+
n
!
∗
n
!
(
y
−
n
!
)
x=n!+{n!*n!\over{(y-n!)}}
x=n!+(y−n!)n!∗n!
6.通过式子5我们知道
n
!
n!
n!一定是整数,如果要
x
x
x是整数那么后面那部分也要是整数说明
(
y
−
n
!
)
∣
n
!
∗
n
!
(y-n!)|n!*n!
(y−n!)∣n!∗n!
7.那么我们就可以运用质因数分解来求约数个数那个公式
s
u
m
=
(
1
+
c
1
)
∗
(
1
+
c
2
)
+
.
.
.
(
1
+
c
n
)
sum=(1+c_1)*(1+c_2)+...(1+c_n)
sum=(1+c1)∗(1+c2)+...(1+cn)
8.其中
n
!
=
p
1
c
1
∗
p
2
c
2
∗
.
.
.
.
∗
p
n
c
n
n!=p_1^{c_1}*p_2^{c_2}*....*p_n^{c_n}
n!=p1c1∗p2c2∗....∗pncn那么
n
!
∗
n
!
=
p
1
2
c
1
∗
p
2
2
c
2
∗
.
.
.
.
∗
p
n
2
c
n
n!*n!=p_1^{2c_1}*p_2^{2c_2}*....*p_n^{2c_n}
n!∗n!=p12c1∗p22c2∗....∗pn2cn
9.那么我们就可以联系上次快速阶乘分解得方法
不懂戳这里
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, mod = 1e9 + 7;
int prime[N], cnt;
bool vis[N];
int n;
void init(int n)
{
for(int i = 2; i <= n; ++ i)
{
if(!vis[i]) prime[cnt ++] = i;
for(int j = 0; j < cnt && i * prime[j] <= n; ++ j)
{
vis[i * prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
}
int main()
{
cin >> n;
init(n);
int res = 1;
for(int i = 0; i < cnt; ++ i)
{
int p = prime[i];
int s = 0;
for(int j = n; j; j /= p) s += j / p;
res = 1ll * res * (2 * s + 1) % mod;
}
cout <<res;
return 0;
}