题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int n1=n;
double s1=Math.sqrt(n);
String str="";
//!!i<=s1,要考虑到n=25这种质因子本身就是自己的开方的情况
for(int i=2;i<=s1;i++){
//!这段会导致逻辑上的省略,先发现不能整除之后就直接跳过判断是否质数了,这样就会导致漏掉最后一个质因子,可使用171进行查看 171=3*3*19
//19是小于sqr(171)的质因子
while(n1%i==0&&is_Prime(i)){//如果当前i是质因子
str+=" "+i;//添加此质因子到结果中
n1=n1/i;//除掉这个质因子,进入下一个循环的判断
}
}
//!!补上可能会被漏掉的最后一个质因子,并且这个数字不能是1
if(is_Prime(n1)&&n1!=1){
str+=" "+n1;
}
str=str.substring(1);//把开头的空格去掉
System.out.println(str);
}
//谓语函数,判断某个因子是否质数
public static Boolean is_Prime(Integer num) {
double s2 = Math.sqrt(num);
//开方判断法
for (int i = 2; i < s2; i++) {
if (num % i == 0)//如果遇到一个数能够整除,说明有别的因数,就不是质数
return false;
}
return true;
}
}