Java 有没有更好的算法来实现这一点?(单位分数创建)

Java 有没有更好的算法来实现这一点?(单位分数创建),java,fractions,Java,Fractions,我遇到了一个问题,其中必须添加1/2-1/1000之间的分数,以创建所有唯一单位分数的最长序列 构造这些分数的规则: 让我们创建一个集合:D,D仅用于保存唯一的单位分数,子分数可以相加为相同的分数,例如: 1/10 / \ 1/110 + 1/11 1/35 + 1/14 所有子分数都可以保留在集合中,只要它们本身不是相同的分数,一旦我们将它们相加,它们的总和可以达到相同的根 目标是: 分数相加的方式必须精确到1。任

我遇到了一个问题,其中必须添加1/2-1/1000之间的分数,以创建所有唯一单位分数的最长序列

构造这些分数的规则:

让我们创建一个集合:D,D仅用于保存唯一的单位分数,子分数可以相加为相同的分数,例如:

          1/10             
        /      \
1/110 + 1/11    1/35 + 1/14
所有子分数都可以保留在集合中,只要它们本身不是相同的分数,一旦我们将它们相加,它们的总和可以达到相同的根

目标是:

分数相加的方式必须精确到1。任何子分数都不允许超过1000,因为它明确地介于2和1000之间,因此构成1/1000的分数将不适用(1/1004+1/251000)

目前我发现最有效的方法是:

找出构成当前分数的两个最低倍数,例如1/6=A=3,B=2。现在我们完成下面的方程:C=(A+B)*A,D=(A+B)*B。现在C&D是我的初始分数的子分数

              1/6
           /       \
        1/15       1/10
代码:

public static int[] provideFactorsSmallest(int n) {
    int k[] = new int[2];

    for(int i = 2; i <= n - 1; i++) { 
        if(n % i == 0) {
            k[0] = i;
            break;
        }
    }

    for(int i = k[0] + 1; i <= n - 1 && k[0] != 0; i++) {
        //System.out.println("I HAVE BEEN ENTERED");
        if(k[0] * i == n) {
            k[1] = i;
            int firstTerm =  k[0];
            int secondTerm = k[1];
            k[0] = (firstTerm + secondTerm) * firstTerm;
            k[1] = (firstTerm + secondTerm) * secondTerm;
            return k;
        }
    }
    return null;
}
public static int[]providerfactorssmallest(int n){
int k[]=新int[2];

对于(int i=2;i)如果代码有效,那么这个问题可能适合我。我一直在思考你的第一个问题(没有发布任何内容),但你比我走得更远。在我看来,你走的方向是正确的。我没有任何改进的想法。可能重复的猜测不容易?