import java.util.ArrayList;
/**
* @author cherhio
* @date Created in 2019-05-05 10:55
*
* 题目:将一个正整数分解质因数。
* 例如:输入90,打印出90=2*3*3*5。
*/
public class solution {
public static void main(String[] args) {
decomposedPrimeNumber(90);
}
/**
* 分解质因数
* @param n
*/
public static void decomposedPrimeNumber(int n){
ArrayList list = new ArrayList();
/*
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
//找到一个最小的质数k
int k = 0;
for (int i = 2; i < n; i++) {
if (isPrime(i)){
k = i;
break;
}
}
//保留原始数,方便打印的时候展示
int i = n;
//(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
while (k != n){
//(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
if (n != k && n % k == 0){
list.add(k);
n = n / k;
}else {
//(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
k = k + 1;
}
}
list.add(k);
print(i,list);
}
/**
* 打印结果的方法
* @param list
*/
public static void print(int result,ArrayList list){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if (i == list.size() - 1){
String str = String.valueOf(list.get(i));
sb.append(str);
}else {
String str = String.valueOf(list.get(i)) + "*";
sb.append(str);
}
}
System.out.println(result+"="+sb);
}
/**
* 判断质数的方法
* @param n
* @return
*/
public static boolean isPrime(int n){
for (int i = 2; i < n; i++) {
if (n % i == 0){
return false;
}
}
return true;
}
}
输出结果