今天碰到一个问题:分解任意一个正整数的质因数然后打印,比如90=2*3*3*5。首先得搞清楚啥是质因数:质数+因数。一个整数可由几个因数相乘来表示,如果这些因数都适合质数,那么自然就是质因数了。接着搞清楚另一个问题:判断一个数是否质数。很简单,看从2开始到这个数的平方根能否被这个数整除,不能整除就是质数。有了这个逻辑再来分解质因数就简单了,只要不是质数就接着往下整除就是了。废话不说,直接上代码:
package com.wlf;
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);
}
}
程序跑起来,输入210后回车:
210
210=2*3*5*7
Process finished with exit code 0