1/N! = 1/X + 1/Y
(0<x<=y),给出N,求满足条件的整数解的数量。例如:N = 2,1/2 = 1/3 + 1/6,1/2 = 1/4 + 1/4。由于数量可能很大,输出Mod 10^9 + 7。
Input
输入一个数N(1 <= N <= 1000000)。
Output
输出解的数量Mod 10^9 + 7。
Input示例
2
Output示例
2
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 1e6 + 10;
const int MOD = 1e9 + 7;
typedef long long ll;
int prime[MAXN], cnt;
bool vis[MAXN];
void init()
{
cnt = 0;
memset(vis, 0, sizeof(vis));
for (int i = 2; i < MAXN; i++)
{
if (!vis[i])
{
prime[cnt++] = i;
for (int j = i + i; j < MAXN; j += i)
{
vis[j] = 1;
}
}
}
}
ll calu(int n, int p)
{
if (n < p)
{
return 0;
}
return calu(n / p, p) + n / p;
}
ll quick_mod(ll a, ll b)
{
ll result = 1;
while (b)
{
if (b & 1)
{
result = result * a % MOD;
}
b >>= 1;
a = (a * a) % MOD;
}
return result;
}
int main()
{
init();
int n;
cin >> n;
ll result = 1;
ll m = quick_mod(2LL, (ll)MOD - 2);
for (int i = 0; i < cnt && prime[i] <= n; i++)
{
ll tmp = (calu(n, prime[i]) * 2 + 1) % MOD;
result = result * tmp % MOD;
}
result = result * m % MOD;
result = (result + m % MOD) % MOD;
cout << result << endl;
return 0;
}