故可以利用 AcWing 197. 阶乘分解 的模型了。
上图转自:彩色铅笔
时间复杂度:O(n)
,推导过程见AcWing 197. 阶乘分解
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10, mod = 1e9 + 7;
int n;
bool st[N];
int primes[N], cnt;
void init(int n)
{
for (int i=2; i<=n; ++i)
{
if (!st[i]) primes[cnt++] = i;
for (int j=0; primes[j]*i<=n; ++j)
{
st[primes[j]*i] = true;
if (i%primes[j]==0) break;
}
}
}
signed main()
{
cin >> n;
init(n);
int res = 1;
for (int i=0; i<cnt; ++i)
{
int t = n;
int p = primes[i];
int s = 0;
while(t>=1) s += t/p, t /= p;
res = (2*s+1)*res%mod;
}
cout<<res<<endl;
return 0;
}