![[luogu5253]丢番图【数学】,第1张 [luogu5253]丢番图【数学】,第1张](/aiimages/%5Bluogu5253%5D%E4%B8%A2%E7%95%AA%E5%9B%BE%E3%80%90%E6%95%B0%E5%AD%A6%E3%80%91.png)
【传送门】
题目大意求\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n}\)有多少组不同的解。
将式子转化成\((n-x)(n-y)=n^2\)的形式。
那么很明显,因为我们要求正整数的解,那么就是要求\(a\times b=n^2\)的解的个数。
又变成了约数个数的问题。
#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
#define db double
using namespace std;
template <typename T>
inline void read(T &x) {
x = 0; T fl = 1; char ch = 0;
for (; ch < '0' || ch > '9'; ch = getchar())
if (ch == '-') fl = -1;
for (; ch >= '0' && ch <= '9'; ch = getchar())
x = (x << 1) + (x << 3) + (ch ^ 48);
x *= fl;
}
ll n, ans;
int main() {
read(n); ans = 1;
for (ll i = 2; i * i <= n; i ++) {
if (n % i == 0) {
ll tot = 0;
for (; n % i == 0; n /= i) ++ tot;
ans *= (tot * 2 + 1);
}
}
if (n > 1) ans *= 3;
printf("%lld\n", (ans + 1) / 2);
return 0;
}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)