C06分解质因数

发布时间 2023-03-22 21:12:58作者: 缕一缕清风

import java.util.ArrayList;
import java.util.Scanner;

public class A06分解质因数 {
// 将一个正整数分解质因数.例如:输入90,打印出90=233*5
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要打印的数字:");
int a = input.nextInt();
int b = a;
input.close();
ArrayList list = new ArrayList<>();// 新建动态数组装质因数
int t;
while (true) { //死循环
if (isSS(b)) { //如果b是素数,没法再分解
list.add(b); //把b加入到动态数组中
break; //跳出循环
} else {
t = min(b); //求b的最小公约数
list.add(t); //把t加入到动态数组中
b = b / t;
}
}
StringBuilder sb = new StringBuilder(); // 拼接字符串
for (int i = 0; i < list.size() - 1; i++) {
sb.append(list.get(i));
sb.append("x");
sb.append(list.get(list.size() - 1));
System.out.println(a + "=" + sb);
}
}

// 求数n的最小公约数
private static int min(int n) {
	int min = -1;
	for (int i = 2; i < n; i++) {
		if (n % i == 0) {
			min = i; // 第一次整除就是最小公约数
			break;
		}
	}
	return min;
}

// 判断数n是否为素数
private static boolean isSS(int n) {
	boolean flag = true;
	for (int i = 2; i < n; i++) {
		if (n % i == 0) {
			flag = false;// n不是素数
			break;
		}
	}
	return flag;
}

}