//传入一个整数,返回分解的质数,例如num=18,返回[[2,1][3,2]],18=2^1+3^2
public static ArrayList<ArrayList<Integer>> factorization (int num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
int i = 2; //质数从2开始累计
int data = 0; //记录当前的除数(即所操作的质数)
int index = 0; //记录data的次方
while(i<= num){
//i==num有两种情况,(1)24=2^3+3^1; (2)18=2^1+3^2
//第(1)种情况当前所操作的质数在上一轮循环会进入第(30-38)步的代码
//第(2)种情况当前所操作的质数在上一轮循环会进入第(24-27)步的代码
if(i==num){
ArrayList<Integer> list = new ArrayList<>();
if(data==i){
list.add(data);
list.add(index+1);
result.add(list);
}else{
list.add(i);
list.add(1);
result.add(list);
}
break;
}else if(num % i == 0){
data = i;
num = num/i;
index++; //次方数加1
}else{
//把上一轮数加到数组
if(data != 0){
ArrayList<Integer> list = new ArrayList<>();
list.add(data);
list.add(index);
result.add(list);
index = 0;
data = 0;
}
i++;
}
}
return result;
}
分解质因数Java实现
于 2022-04-17 00:00:03 首次发布