题意:求不定方程1 / x+1 / y = 1 / n! 的正整数解的个数.
转化为求 (n!) ^ 2 的约数个数
推导过程(大佬讲的很清晰!)
总结:
在对于求多少个整数对(x,y)满足某方程式的问题时,可以先观察出 x、y与未知数的关系,然后转化成一个用 一个 x 表示的 y 的表达式,根据 y 的约束条件得到(x,y)的匹配数量。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1000010,mod = 1e9 + 7;
typedef long long ll;//记得long long和取模
int prime[N],n,idx;
bool st[N];
ll res = 1;
void get_prime(int n)//线性筛质数
{
for(int i = 2; i <= n; i ++ )
{
if(!st[i])
prime[idx ++ ] = i;
for(int j = 0; i * prime[j] <= n; j ++ )
{
st[i * prime[j]] = true;
if(i % prime[j] == 0)
break;
}
}
}
int main()
{
cin>>n;
get_prime(n);
for(int i = 0; i < idx; i ++ )//阶乘分解质因数模板,枚举质数
{
int p = prime[i];
ll s= 0;//枚举到的每个质数的指数
for(int j = n; j ; j /= p)//关键,有点难理解,自己在纸上模拟一下就清晰了
s += j / p;
res = (ll) res * (2 * s + 1) % mod;//约数个数,由于是平方要乘2再加1
}
cout<<res;
return 0;
}