问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。
public class Test1_27 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Factorization.factorization(scanner.nextInt());
}
}
class Factorization {
// 问题描述
// 设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。
public static void factorization(int n){ //因式分解
if(isPrime(n)){
System.out.print(n);
}else {
int[] arr = getprime(n);
for (int i = 0; i < arr.length; i++) {
if(n%arr[i] == 0){
System.out.print(arr[i]+"*");
//factorization(n/arr[i]);
if(isPrime(n/arr[i])){
System.out.print(n/arr[i]);
break;
}else {
factorization(n/arr[i]);
break;
}
}
}
}
}
public static int[] getprime(int n){ //找出1-n 的所有素数
int[] arr = new int[n];
int a = 0;
for (int i = 2; i <= n; i++) {
if(isPrime(i)){
arr[a] = i;
a++;
}
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] != 0){
count++;
}
}
int[] arr1 = new int[count];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = arr[i];
}
return arr1;
}
public static boolean isPrime(int n){ //判断一个数是否为素数
for (int i = 2; i < n; i++) {
if(n%i == 0){
return false;
}
}
return true;
}
}