每一个数都可以分解成素数的乘积
所以当我们求一个数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; } }