题解 | #质数因子#

质数因子

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-21 00:27
点赞 评论 收藏
分享
有没有友友知道hr面会问什么我应该反问什么?还有如何防止hr套话啊?还有应该如果催hr推进快一点#字节#OPPO#hr面
牛客989988346号:职业规划,优缺点,为什么选择这个岗,对应聘公司产品的了解和满意度,如果让你改进公司产品你会怎么做,对ai(新技术)的了解,有无其他offer,什么时候能到岗
点赞 评论 收藏
分享
风的叶脉:不知道但我想要鞭打你( '-' )ノ)`-' ) 加油
点赞 评论 收藏
分享
03-28 00:50
已编辑
武汉理工大学 Java
礼堂顶真:一般都是横向对比挂的,很少hr面本身挂人,除非答的太逆天
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务