1、分解质因数介绍
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。
参考百度。
2、算法思路
先判断数num是否为合数,如果是,选择最小的质数k=2,进行分解质因数的过程:
(1)如果k小等于num,程序继续执行;
(2)如果num能被k整除,说明k是num的一个因数,并用num除以k的商作为新的正整数num,重复执行第一步;否则用k+1作为k的值,重复执行第一步。
3、具体代码
package com.peter.algorithm.other;
import org.junit.Test;
import java.util.ArrayList;
public class DecomposePrimeNumber {
@Test
public void test() {
ArrayList<Integer> compositeNumberList = new ArrayList<>();
ArrayList<Integer> primeNumberList = new ArrayList<>();
for (int i = 2; i < 100; i++) {
if (isCompositeNumber(i)) {
compositeNumberList.add(i);
System.out.println(decomposePrimeNumber(i));
} else {
primeNumberList.add(i);
}
}
System.out.println(compositeNumberList);
System.out.println(primeNumberList);
}
public static String decomposePrimeNumber(int num) {
if (num < 2 || num > Integer.MAX_VALUE) {
throw new IllegalArgumentException("out of range!");
}
if (!isCompositeNumber(num)) {
return num + " is not a composite number!";
}
StringBuffer stringBuffer = new StringBuffer(num + "=");
int begin = 2;
while (num >= begin) {
if (num % begin == 0) {
stringBuffer.append(begin + "*");
num /= begin;
} else {
begin++;
}
}
return stringBuffer.toString().substring(0, stringBuffer.length() - 1);
}
//判断一个数是否为合数
private static boolean isCompositeNumber(int num) {
if (num < 2 || num > Integer.MAX_VALUE) {
throw new IllegalArgumentException("out of range!");
}
int begin = 2;
int sum = 0;
while (num >= begin) {
if (num % begin == 0) {
num /= begin;
sum++;
} else {
begin++;
}
}
return sum > 1 ? true : false;
}
}
4、2至99之间的合数分解质因数
类别 | 具体整数 |
---|---|
合数 | 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 60, 62, 63, 64, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91, 92, 93, 94, 95, 96, 98, 99 |
素数 | 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 |
合数 | 分解质因数 |
---|---|
4 | 2*2 |
6 | 2*3 |
8 | 2*2*2 |
9 | 3*3 |
10 | 2*5 |
12 | 2*2*3 |
14 | 2*7 |
15 | 3*5 |
16 | 2*2*2*2 |
18 | 2*3*3 |
20 | 2*2*5 |
21 | 3*7 |
22 | 2*11 |
24 | 2*2*2*3 |
25 | 5*5 |
26 | 2*13 |
27 | 3*3*3 |
28 | 2*2*7 |
30 | 2*3*5 |
32 | 2*2*2*2*2 |
33 | 3*11 |
34 | 2*17 |
35 | 5*7 |
36 | 2*2*3*3 |
38 | 2*19 |
39 | 3*13 |
40 | 2*2*2*5 |
42 | 2*3*7 |
44 | 2*2*11 |
45 | 3*3*5 |
46 | 2*23 |
48 | 2*2*2*2*3 |
49 | 7*7 |
50 | 2*5*5 |
51 | 3*17 |
52 | 2*2*13 |
54 | 2*3*3*3 |
55 | 5*11 |
56 | 2*2*2*7 |
57 | 3*19 |
58 | 2*29 |
60 | 2*2*3*5 |
62 | 2*31 |
63 | 3*3*7 |
64 | 2*2*2*2*2*2 |
65 | 5*13 |
66 | 2*3*11 |
68 | 2*2*17 |
69 | 3*23 |
70 | 2*5*7 |
72 | 2*2*2*3*3 |
74 | 2*37 |
75 | 3*5*5 |
76 | 2*2*19 |
77 | 7*11 |
78 | 2*3*13 |
80 | 2*2*2*2*5 |
81 | 3*3*3*3 |
82 | 2*41 |
84 | 2*2*3*7 |
85 | 5*17 |
86 | 2*43 |
87 | 3*29 |
88 | 2*2*2*11 |
90 | 2*3*3*5 |
91 | 7*13 |
92 | 2*2*23 |
93 | 3*31 |
94 | 2*47 |
95 | 5*19 |
96 | 2*2*2*2*2*3 |
98 | 2*7*7 |
99 | 3*3*11 |