我必须写一个代码,找到给定数的素因式分解。代码必须返回二维数组,该数组的第一行具有数字,第二行具有幂。我不知道如何将结果保存在此数组中。
public static long[][] primeFactorization(long l) {
//n = 6600 = 2^3*3^1*5^2*11^1
// z[0][4] = 2|3|5|11 - coefficient
// z[1][4] = 3|1|2|1 - power
int count = 0;
int i=2;
long[][] x = new long[2][];
while(l%2==0) {
l=l/2;
count++; //power 8 = 2.2.2 => count = 3
}
i++;
//ToDo: save i=2 in array[0][] = {2,...};
for (i = 3; i <= Math.sqrt(l); i = i+2) {
// While i divides l, print i and divide l
while (l%i == 0) {
int temp = i; //ToDo: save the divider in array[0][]
count++; //ToDo: save the power in array[1][]
l = l/i;
i = temp;
}
}
return x;
}
答案 0 :(得分:1)
下面的一个没有按预期工作,但是在您要寻找的正确方向上。您缺少可以执行以下操作的填充数组部分。我知道下面的代码有一些故障,可以通过研究一下来解决。但这绝对会给您一个方向。如果您仍然遇到问题,请告诉我们。
public static long[][] primeFactorization(long l) {
//n = 6600 = 2^3*3^1*5^2*11^1
// z[0][4] = 2|3|5|11 - coefficient
// z[1][4] = 3|1|2|1 - power
int count = 0;
int i=2;
long[][] x = new long[2][10];
while(l%2==0) {
l=l/2;
count++; //power 8 = 2.2.2 => count = 3
}
x[0][0]=2;
x[1][0]=count;
//ToDo: save i=2 in array[0][] = {2,...};
int row=0;
int col=1;
for (i = 3; i <= l; i = i+2) {
count=0; //setting count to zero for every divisor
// While i divides l, print i and divide l
while (l%i == 0) {
count++; //ToDo: save the power in array[1][]
l = l/i;
}
x[row][col]=i;
x[row+1][col]=count;
col++;
}
return x;
}
答案 1 :(得分:1)
如果我对,您会在循环的每次迭代中接收值,并且您希望将这些值存储在具有2行的2d数组中。因此,通常您可以执行以下操作:
1)在循环外创建一个整数变量(假设int index = 0;
);
2)在循环的每次迭代中,您都可以将结果保存在2d数组中,如下所示:x[0][index] = result1;
和x[1][index] = result2
;
3)在循环结束时增加变量索引(index ++);