Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求1/X+1/Y=1/N的可能解的个数,给出N_Algorithm_Equation - Fatal编程技术网

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

Algorithm 求1/X+1/Y=1/N的可能解的个数,给出N,algorithm,equation,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。 它可以写成 当a=1时,b=N^2 当a=2b=N^2/2时,依此类推。 所以a的值在[1,N]的范围内,b的值在[N^2,N]的范围内。但是X和Y是正整数。因此a和b也是整数 所以我必须考虑a和b的值对,它们都是

方程为: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时,b=N^2 当a=2b=N^2/2时,依此类推。 所以a的值在[1,N]的范围内,b的值在[N^2,N]的范围内。但是X和Y是正整数。因此a和b也是整数

所以我必须考虑a和b的值对,它们都是整数

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

方程

1/X + 1/Y = 1/N
可以重新安排到

(Y+X)/(XY) = 1/N
通过将右侧延伸到公共分母。所得方程等价于

(XY)/(X+Y) = N

这可能更适合用整数进行计算。

以下是几个观察结果:

1/X+1/Y=1/N等于X-NY-N=N^2 如果N的素因式分解是N=p1^i1*p2^i2*..*pk^ik,那么答案是2*i1+12*i2+1…2*ik+1,您可以使用 您可以在OsqrtN*logN中计算此值 以下是如何进行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]]
    }
}

据我所知,你所做的只是发布一些要求,并要求其他人解决问题。那是offtopic@Paul我想现在你可以看到那里有什么了,这取决于你可以重新验证你的评论和其他东西。谢谢。也许可以转学数学?我对那个网站不太了解——这是不是关于那个主题?这绝对不是一个程序设计question@AdamSmith我从来没有要求一个程序或代码,我只是问什么方法可以解决这个问题。你的选票是你的选择,不是我的。甚至我也对解决问题和寻找答案感兴趣,而不是投票和评论。嗯,X和Y必须大于N。@Henry我犯了错误吗?是的,例如,如果X