我遇到了一个问题,必须添加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;
}
我的问题:
将数字配对和分组以实现可能的最长分数序列的最有效方法是什么?
提前谢谢!