как разделить int снова и снова на одно и то же число, если его мод 0 - PullRequest
0 голосов
/ 14 марта 2020

Мне нужно создать алгоритм. Алгоритм принимает int и возвращает массив. Предполагается, что делить int до тех пор, пока остаток равен нулю. Если он больше не делится, он должен сделать то же самое со следующим числом (числа 2, 3,5 ... все простые числа)

Вот пример того, что я пытаюсь объяснить. Number: 5 Массив для возврата: {5}

Number: 16 Массив для возврата: {2, 2, 2, 2}

Number: 100 Массив для возврата: {2 , 2, 5, 5}

Как сделать так, чтобы al oop работал до тех пор, пока целое число больше не делится без остатка?

Ответы [ 3 ]

0 голосов
/ 14 марта 2020

Вот подход грубой силы. Факторизация для очень больших чисел может быть очень сложной и трудоемкой и требует специальных алгоритмов. Он работает путем постоянного деления на текущее простое число, пока остаток не станет ненулевым. Затем он продолжается со следующим простым числом.

   public static List<Integer> factor(int n) {
        int save = n;
        int[] primes = {2,3,5}; // limited list of primes
        List<Integer> factors = new ArrayList<>();
        for (int p : primes) {
            while (n % p == 0) {
             factors.add(p);
             n/=p;
            }
        }
        if (n != 1) {
            System.out.println("Incomplete factorization for " + save);
        }
        return factors;
   }
0 голосов
/ 14 марта 2020

Так как это твоя домашняя работа, я просто дам тебе идею. Вы можете попробовать реализовать. Примечание. Непростое число делится как минимум на простое число под ним.

divisible = N
prime = p

loop when (p <= N) {
              check the reminder
              if reminder == !0 {
                 increase p
              }

              if reminder == 0 {
                 store p
                 divide N by p;
              }

 }
0 голосов
/ 14 марта 2020

Попробуйте эту функцию, которая будет вычислять простые числа числа.

public static void main(String[] args) {
    System.out.println("Factors for 5: " + calculatePrimeFactors(5)); // [5]
    System.out.println("Factors for 16: " + calculatePrimeFactors(16)); // [2, 2, 2, 2]
    System.out.println("Factors for 100: " + calculatePrimeFactors(100)); // [2, 2, 5, 5]
}

public static List<Integer> calculatePrimeFactors(int number) {
    // Create empty factors list
    List<Integer> factors = new ArrayList<Integer>();
    // For factor 2; while factor is smaller than the passed number; increase factor
    for(int factor = 2; factor <= number; factor++) {
        // While number % factor equals 0 (fully dividable without rest); add factor and divide number by factor
        while(number % factor == 0) {
            factors.add(factor);
            number = number / factor;
        }
    }
    return factors;
}
...