将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
package demo40;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
*
* @author Administrator
*
*/
public class Demo04 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();//新建一个集合,用来存储质因子
System.out.println("请输入一个正整数:");
Scanner s = new Scanner(System.in); //键盘输入
int n = s.nextInt();
Demo04 demo = new Demo04();
demo.test(n, list); //调用方法
System.out.print(n+"的质因数分解为:"+"\t");
System.out.print(n+"=");
for(int i=0;i<list.size();i++){ //循环遍历所有质因子
if (i==0) {
System.out.print(list.get(i));
}else {
System.out.print("*"+list.get(i));
}
}
}
public void test(int n,List<Integer> list){
boolean flag = true;
int prime = 0;
for(int i=2;i<=n && flag;i++){
for(int j=2;j<=i;j++){
if (i==j) { //i==j时,j为质数
if (n%j == 0) { //条件成立时,j不仅为质数,而且为n的质因子,然后退出循环
prime = j;
flag = false;
break;
}
}else if (i%j == 0) { //条件不成立,j不是质数,然后退出循环
break;
}
}
}
if (prime == n) {
System.out.println("质因子:"+prime); //打印最后一个质因子
list.add(prime);
}else if (prime != 0) {
System.out.println("质因子:"+prime); //打印质因子
list.add(prime);
test(n/prime,list);
}
}
}