如何将int反复除以相同的数字,只要其mod 0

问题描述 投票:0回答:4

我需要创建一个算法。该算法获取一个int并返回一个数组。只要余数为零,就应该对int进行除法。如果它不再可整除,则应该对下一个数字进行同样的处理。(数字为2、3、5 ...都是质数)

这里是我要解释的示例。数:5要返回的数组:{5}

数字:16要返回的数组:{2,2,2,2}

数量:100要返回的数组:{2,2,5,5}

我如何制作一个循环,直到整数不再可以除尽没有余数?

java algorithm primes
4个回答
0
投票

这里是蛮力方法。分解非常大的数据可能非常困难且耗时,并且需要特殊的算法。通过连续除以当前素数来工作,直到余数为非零为止。然后继续下一个素数。

   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
投票

由于这是您的家庭作业,我只是给您个主意。您可以尝试实施。注意:非质数至少可被其下的质数整除。

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
投票

所以我想出了下面的代码。但是我不太确定我是怎么想到的,为什么它不起作用....

public static int[] primfaktorzerlegung(int zahl) {
    ArrayList<Integer> result = new ArrayList<>(); //ArrayList
    int n = zahl;
    //n 50
    int d = 1;
    int[] resultArray = new int[d];
    if(n % 2 == 0) {
        for (int j = 2; j <= n; j++) {

            if (n % j == 0) {
                n = n/2;
                j++;
                result.add(n);
                d = d++;
            }
        } 
        for (int j = 3; j <= n; j++) {

            if (n % j == 0) {
                n = n/3;
                j++;
                result.add(n);
                d = d++;
            }
        }
        for (int j = 5; j <= n; j++) {

            if (n % j == 0) {
                n = n/5;
                j++;
                result.add(n);
                d = d++;
            }
        }
        for (int j = 7; j <= n; j++) {

            if (n % j == 0) {
                n = n/7;
                j++;
                result.add(n);
                d = d++;
            }
        }
        for (int j = 9; j <= n; j++) {

            if (n % j == 0) {
                n = n/9;
                j++;
                result.add(n);
                d = d++;
            }
        }
        for (int j = 11; j <= n; j++) {

            if (n % j == 0) {
                n = n/11;
                j++;
                result.add(n);
                d = d++;
            }
        }
    }
    return resultArray;

-2
投票

尝试使用此函数将计算数字的质数。

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.