对于方程X^Z + Y^Z + XYZ = K,已知K求此方程解的个数,其中要求X<Y,Z>1,而K的范围是0到2^31。
首先我们来分析Z的范围:由于X,Y为正整数,X < Y,则1 < X < Y, =====> Y >= 2 => X^Z + Y^Z + XYZ > Y^Z => 2^Z <= Y^Z < 2^31 所以得到2 <= Z<31 对于Z=2时式子左边可以化为(x+y)^2 = k 的形式。 所以当k 是完全平方数的时候,(x,y) 才有可能有解。 假如m^2 = k ,问题就相当于求x+y = m (x < y) 的解的组数。 容易得出ans=(m-1)/2。
而Z在3<=Z<31的情况。 我们再来分析X的范围: 对于方程X^Z + Y^Z + XYZ = K, X < Y,则有X^Z + Y^Z + XYZ > 2*X^Z + X*X*Z >= 2*X^3 + 3*X^2 即我们得到:2*X^3 + 3*X^2 < 2^31 解这个方程有:X < 1024 于是现在我们得到了3 <= Z < 31,1 <= X < 1024,当然Z=2特殊处理。接下来就直接枚举X,Z,再枚举Y。
复杂度O(10^4)左右,因为y不会和相差太远
#pragma comment(linker, "/STACK:36777216")#pragma GCC optimize ("O2")#include #include #include #include #include #include #include