今天碰到一个问题:分解任意一个正整数的质因数然后打印,比如90=2*3*3*5。愣住了,根本不知道怎么搞,把质数的判断逻辑都忘得一干二净。后来回去看了下,原来判断一个数是否质数就是看从2开始到这个数的平方根能否被这个数整除,不能整除就是质数。有了这个逻辑再来分解质因数就简单了,只要不是质数就接着往下整除就是了。废话不说,直接上代码:
package com.wulinfeng; import java.util.LinkedList; import java.util.List; import java.util.Scanner; /** * 打印分解质因数 */ public class Example034 { public static void main(String[] args) { int num = new Scanner(System.in).nextInt(); printPrimes(num); } /** * 获取分解后剩余值,打印质因数 */ public static int getNotPrime(int num) { // 1、判断num是否质数 for (int i = 2; i <= Math.sqrt(num); i++) { // 2、不是则打印分解的质数,返回未被分解的数 if (num % i == 0) { System.out.print(i + "*"); num /= i; return num; } } // 3、是质数,返回0 return 0; } public static void printPrimes(int num) { int lastPrime = 0; System.out.print(num + "="); // 1、获取待分解数字第一次分解质因数后的结果 int notPrime = getNotPrime(num); // 2、质数无须分解 if (notPrime == 0) { System.out.println("待分解数为质数."); return; } // 3、只要分解后不为0,说明可以接着一直分解 while (notPrime != 0) { lastPrime = notPrime; notPrime = getNotPrime(notPrime); } // 3、取得最后一个质数并打印 System.out.print(lastPrime); } }