求出1 / X + 1 / Y = 1 / N的可能解的个数,给出N

时间:2015-10-14 19:05:32

标签: algorithm equation

等式为: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。 它可以写成

  1. 当a = 1 b = N ^ 2
  2. 当a = 2 b = N ^ 2/2等等时。
  3. 因此a的值将在[1,N]的范围内,而b的值将在[N ^ 2,N]的范围内。但X和Y是正整数。因此a和b也是整数。

    所以我必须得到a和b的值对,其中两者都是整数。

    尝试提供算法方法。是的,尝试给出一种优化方法来解决这类方程式。

2 个答案:

答案 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

可能更适合用整数计算。