📅  最后修改于: 2023-12-03 15:12:13.799000             🧑  作者: Mango
该问题是一个典型的代数问题,要求求解一个方程的解。
具体问题如下:
$$\frac{1}{x} + \frac{1}{y} = \frac{1}{z}$$
其中,$x, y, z$ 均为正整数且 $\gcd(x, y, z) = 1$,求满足条件的三元组 $(x, y, z)$ 的个数。
我们首先可以将方程变形为
$$xy - xz - yz = 0$$
然后,我们需要将其转化为一个组合数学问题,即求 $xy$ 可以被表示为 $xz + yz$ 的方案数。
我们可以将式子改写为
$$x(y-z) = yz$$
然后,我们可以将 $y = d_1z, x = d_2z$,这样的话,原式子即变为
$$d_2 = \frac{d_1}{d_1 - 1}$$
我们可以发现,$d_1$ 的可行取值只有那些 $z$ 的因子,所以我们可以一次枚举 $z$ 的所有因子,计算 $d_1, d_2$ 的值是否在取值范围内即可。
思路如上所述,首先可以将方程变形为
$$xy - xz - yz = 0$$
然后,我们需要将其转化为一个组合数学问题,即求 $xy$ 可以被表示为 $xz + yz$ 的方案数。我们可以将式子改写为
$$x(y-z) = yz$$
然后,我们可以将 $y = d_1z, x = d_2z$。这样的话,原式子即变为
$$d_2 = \frac{d_1}{d_1 - 1}$$
我们可以发现,$d_1$ 的可行取值只有那些 $z$ 的因子,所以我们可以一次枚举 $z$ 的所有因子,计算 $d_1, d_2$ 的值是否在取值范围内即可。
代码如下:
```python
def solve(n):
divisors = [i for i in range(1, int(n ** 0.5) + 1) if n % i == 0]
cnt = 0
for d in divisors:
if d == 1:
continue
if (d + 1) * n % (d * (d - 1)) == 0:
cnt += 1
return cnt
n = int(input())
print(solve(n))