HJ6 质数因子
描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如 180 的质因子为 2 2 3 3 5 )
数据范围: 1≤n≤2×109+14 1≤n≤2×109+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例 1
输入:
180
输出:
2 2 3 3 5
题解
import java.util.Scanner;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
// 判断是否为质数
if(isPrime(a)){
// 是质数直接返回
System.out.println(a);
}else{
// 不是质数
// 获取质因数
getPrime(a);
}
}
}
// 判断是否为质数
public static boolean isPrime(int a){
boolean flag =true;
for(int i =2;i<=Math.sqrt(a);i++){
//
if(a%i==0){
flag=false;
break;
}
}
return flag;
}
// 获取质因数
public static void getPrime(int a){
//
ArrayList<Integer> num =new ArrayList<>();
for(int i=2;i<=Math.sqrt(a);i++){
// 判断 i 是否为质数
if(isPrime(i)){
// 是质数
// 判断是否整除
// while 获取重复的质因数
// if 获取不重复的质因数
while(a%i==0){
// 是质因数
num.add(i);
// 更新a
a= a/i;
// 判断 a 是否为质数 即结束
if(isPrime(a)){
// 结束
num.add(a);
break;
}
}
}
}
// 输出 以空格隔开
for(int i=0;i<num.size();i++){
if(i==num.size()-1){
System.out.print(num.get(i));
}else{
System.out.print(num.get(i)+" ");
}
}
}
}