题解 | #质数因子#

质数因子

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;
    }
}

全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务