有没有更好的算法可以做到这一点? (单位分数的创建)

时间:2019-03-28 12:51:18

标签: java fractions

我遇到了一个问题,必须添加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;
}

我的问题:

将数字配对和分组以实现可能的最长分数序列的最有效方法是什么?

提前谢谢!

0 个答案:

没有答案