Уникальная факторизация со счетчиком - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь построить программу на JAVA, которая использует теорему уникальной факторизации. Я имею в виду, получить число> 1 от пользователя и распечатать все уникальные факторизации со счетчиком.

для ex, для 100 вывод должен быть

2 2

5 2

с 100 = 2 * 2 * 5 * 5

и для 23 вывод должен быть

23

если на входе 6, то на выходе будет

2
3

и последний пример для 8112:

2 4
3
13 2

Пока что я реализую код, который дает первый столбец и корректирует простые числа. однако мне не удалось посчитать, когда счетчик> 1, чтобы напечатать второй столбец.

Мой код указан ниже:

int n = scanner.nextInt();
    int num = 2;
    while (num <= n) {
        int i = 2;
        boolean isPrime = true;
        while (i < num && isPrime) {
            if (num % i == 0) {
                isPrime = false;
            }
            i++;
        }
        if (isPrime) {
            int counter = 1;
            if (n % num == 0) {
                System.out.println(num);
            }
        }
        num++;
    }

Есть идеи, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Найдя номер, вы должны продолжить поиск счетчика этого. Ниже мое решение.

            int ounter = 0;
            if (n % num == 0) {
                System.out.print(num);
                int n1 = n;
                while(n1%num == 0) {
                    ounter ++;
                    n1 = n1/num;
                }
                if(ounter != 1) {
                    System.out.println(" "+ounter);
                }
            }
0 голосов
/ 30 октября 2018

Ваш counter еще не реализован.

int n = scanner.nextInt();
int num = 2;
while (num <= n) {
    int i = 2;
    boolean isPrime = true;
    while (i < num && isPrime) {
        if (num % i == 0) {
            isPrime = false;
        }
        i++;
    }
    if (isPrime) {
        int counter = 0;
        while (n >= num && n % num == 0) {
            counter++;
            n /= num;
        }
        if (counter == 1) {
            System.out.println(num);
        }
        else if (counter > 1) {
            System.out.println(num + " " + counter);
        }
    }
    num++;
}
...