每一个数都可以分解成素数的乘积

图片说明

所以当我们求一个数target的所有的质因子时,可以先从最小的素数开始去尝试分解,如果2是这个数的质因子,那么就可以一次性的将这个数的所有可能的因子中,是2的幂的因子全部分解掉,那么在之后继续寻找因子的时候,就不会再有2以及2的倍数的因子了;同样的道理,在将2及2的倍数因子全部分解掉以后(target /= 2),如果3是新的target的因子,那么继续将3及3的幂的因子全部除掉(while循环:target /= 3),通过这种方式,我们在往后继续寻找因子的时候,像4、6、8、9这些2或3的幂就不会再作为因子去分解了。而只有那些素数,才有可能作为因子去分解target。

import java.util.Scanner;
public class Main{

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        int target = sc.nextInt();

        if(isSum(target)){
            System.out.print(target+" ");
        }else{

            for(int i = 2;i <= target;i++){

                while(target % i == 0){
                    System.out.print(i + " ");
                    target /= i;
                }
            }
        }
    }

    private static boolean isSum(int target){

        for(int i = 2;i <= Math.sqrt(target);i++){

            if(target % i == 0){
                return false;
            }
        }

        return true;
    }
}