通分:
移項並打開括號:
合併同類項:
令,則。所以:
因爲是一個整數,所以。於是我們把原問題轉化爲求的因數個數。
我們將分解質因數:
那麼由乘法原理,m的因數個數爲:
實現時,我們可以把分解質因數。枚舉,維護前綴積即可。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mn = 1000005, mod = 1e9 + 7;
int pri[mn], cnt; bool vis[mn];
ll ans = 1, num[mn];
int main()
{
int n;
scanf("%d", &n);
vis[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!vis[i]) pri[++cnt] = i;
for(int j = 1; j <= cnt && pri[j] * i <= n; j++)
{
vis[pri[j] * i] = 1;
if(i % pri[j] == 0) break;
}
}
//一點技巧
for(int i = 1; i <= cnt; i++)
for(int j = pri[i]; j <= n; j += pri[i])
for(int t = j; t % pri[i] == 0; t /= pri[i]) ++num[i];
for(int i = 1; i <= cnt; i++)
(ans *= (num[i] << 1) | 1) %= mod;
printf("%lld\n", ans);
}