题解 | #质数因子#
质数因子
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; } }