Prime Factorization Java Array - PullRequest
       7

Prime Factorization Java Array

0 голосов
/ 06 ноября 2018

Я должен написать код, который находит простую факторизацию заданного числа. Код должен вернуть 2-мерный массив, в котором числа в первой строке и числа во второй. Я не знаю, как сохранить результаты в этом массиве.

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;
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Если я вас правильно понял, вы получаете значения внутри каждой итерации цикла и хотите сохранить эти значения в 2d массиве с 2 строками. Так что, как правило, вы можете сделать что-то вроде этого:

1) создать целочисленную переменную вне цикла (скажем, int index = 0;);

2) в каждой итерации цикла вы можете сохранять результаты в вашем 2d-массиве следующим образом: x[0][index] = result1; и x[1][index] = result2;

3) увеличить индекс переменной в конце вашего цикла (index ++);

0 голосов
/ 06 ноября 2018

Нижеследующее не работает должным образом, но в правильном направлении того, что вы ищете. Вам не хватает части массива заполнения, что можно сделать следующим образом. Я знаю, что в приведенном ниже коде есть некоторые глюки, которые можно исправить, посмотрев на них. Но это определенно даст вам направление. Если вы все еще сталкиваетесь с проблемами, пожалуйста, сообщите нам об этом.

    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;
}
...