等式为:1 / X + 1 / Y = 1 / N
其中X,Y和N为正整数。
我必须找到可能解的数量,即X和Y对的值,它们将解决上述等式,因为N是已知的。
显然,对于任何解决方案X> N和Y> N.所以我可以假设X = N + a和Y = n + b。
因此,等式减少到1 /(N + a)+ 1 /(N + b)= 1 / N. 如果我们解决它,它会减少到N ^ 2 = ab。 它可以写成
时因此a的值将在[1,N]的范围内,而b的值将在[N ^ 2,N]的范围内。但X和Y是正整数。因此a和b也是整数。
所以我必须得到a和b的值对,其中两者都是整数。
尝试提供算法方法。是的,尝试给出一种优化方法来解决这类方程式。
答案 0 :(得分:3)
以下是几点意见:
1/X+1/Y=1/N
相当于(X-N)(Y-N)=N^2
N
的素数分解为N = p1^i1*p2^i2*...*pk^ik
,那么答案为(2*i1+1)(2*i2+1)...(2*ik+1)
(您可以使用formula推导出这一点)O(sqrt(N)*log(N))
以下是如何进行分解(Java):
package stackoverflow;
import java.util.ArrayList;
import java.util.List;
public class Factorization {
public static class Pair {
long x, y;
public Pair(long x, long y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return String.format("[%d, %d]", x, y);
}
}
public static List<Pair> factorize(long n) {
List<Pair> ans = new ArrayList<Pair>();
for (long i = 2; i * i <= n; ++i) {
int t = 0;
while (n % i == 0) {
n /= i;
t++;
}
if (t > 0)
ans.add(new Pair(i, t));
}
if (n > 1)
ans.add(new Pair(n, 1));
return ans;
}
public static void main(String[] args) {
System.out.println(factorize(24)); // [[2, 3], [3, 1]]
}
}
答案 1 :(得分:0)
等式
1/X + 1/Y = 1/N
可以重新排列为
(Y+X)/(XY) = 1/N
将右侧扩展为共同点。得到的等式等同于
(XY)/(X+Y) = N
可能更适合用整数计算。