因此,我有一个程序可以找到数字的素因式分解。

public static void primeFactors(int number){
    int i=2;
    while(number>1){
        if (number%i==0){
        System.out.println(i);

            number/=i ;
        }else{
            i++;
            if(isPrime(i)==true){
                        System.out.println(i);

                number/=i;
            }else{
                i++;
}}}}


但问题是我希望它以数组形式返回。而且它必须能够大量运行并在5秒钟内运行。所以我将工作算法转换为:

public static int[] primeFactors2(int number){
    int[] arrayINT =new int[10];
    int i = 2;
    int index=0;
    while(i<=number/2){
        if(number %i==0 && isPrime(i)){
           arrayINT[index]=i;
           index++;
        }
        i++;
    }
    return arrayINT;
}}


这不会返回正确的结果,也不是有效的速度明智的选择。我到底在做什么错!

这是isPrime():

     public static boolean isPrime(int number){
                if (number<2){
                        return false;
                }
                if (number==2){
                        return true;
                }
                if (number%2==0){
                        return false;
                }
                int ceiling=number;
                for(int i=3;number>i&&ceiling>i;i+=2){
                        if(number%i==0){
                                return false;
                        }
                        ceiling=number/i;
              }  return true;
        }

最佳答案

我对代码进行了一些修改,以适应您的要求。请看一下。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


-

public static void main(String[] args) {
    primeFactors(630);
    System.out.println(Arrays.toString(primeFactors2(630)));

}

public static void primeFactors(int number) {
    int i = 2;
    int init = number;
    while(i<=init/2){
        if(number %i==0 && isPrime(i)){
            System.out.println(i);
            number/=i;
            i--;
        }
        i++;
    }
}

public static Integer[] primeFactors2(int number) {
    List<Integer> list = new ArrayList<>();
    int i = 2;
    int init = number;
    while(i<=init/2){
        if(number %i==0 && isPrime(i)){
            list.add(i);
            number/=i;
            i--;
        }
        i++;
    }
    return list.toArray(new Integer[list.size()]);
}

public static boolean isPrime(int number) {
    if (number < 2) {
        return false;
    }
    if (number == 2) {
        return true;
    }
    if (number % 2 == 0) {
        return false;
    }
    int ceiling = number;
    for (int i = 3; number > i && ceiling > i; i += 2) {
        if (number % i == 0) {
            return false;
        }
        ceiling = number / i;
    }
    return true;
}

07-24 19:13