题解 | #质数因子#

质数因子

http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

我们尽量减少循环,这样就能减少时间复杂度

public class Main{
    public static void main(String[] args) {
        // 处理输入
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            // 获取需要求解的值
            int target = sc.nextInt();
            int y = 2;// 因子从2开始算
            while(target != 1){ // 短除法,除到目标值为1为止
                if(target % y == 0) // 能能够整除2
                {
                    System.out.print(y+" ");
                    target /= y;
                }else{// 更新y的值
                    if(y > target / y) y = target;//如果剩余值为质数
                    else y++;  //y值增加1
                }
            }
        }
    }
}
全部评论
除以质数y小于y,代表target不能继续往下除了,小于y的前面都已经输出过了
2 回复 分享
发布于 2023-01-08 17:18 江苏
除以质数y小于y,代表剩下唯一质因子是target了,在这里做这个判断减少运算量
1 回复 分享
发布于 2023-04-20 11:58 上海
质数的相对就是合数,合数是指除了能被 1 和本身整除外,还能被其他数(0 除外)整除的自然数。 使用数学归纳法,一个大的合数都是由其他小合数或者质数因子组成,小合数又能拆解成更小的质数因子,换言之,一个数能够最终分解得到最小的一些质数。 常规情况下,我们都一个一个的判断是不是说质数,思路没有问题,但是就是时间复杂度大。作者这个思路借鉴短除法,先从最小的质数因子开始找,找完之后找下一个,直到最后一个也是质数,每一次循环的数比下一个要大,合数不会走if判断,只会走else,所以当时最后的target/y不能再分解时,那最后的数就是最后要找的质数因子。
点赞 回复 分享
发布于 2024-10-29 13:11 上海
其实就范围控制,比如target 是81 最大的质数也顶多是小于9或者是他自己本身,9以后得再去迭代就没什么意义了
点赞 回复 分享
发布于 2023-12-19 20:15 广东
同问 (y > target / y)
点赞 回复 分享
发布于 2022-11-01 02:03 广东
(y > target / y) 这里怎么解释呢,想不通
点赞 回复 分享
发布于 2022-10-17 22:24 上海

相关推荐

评论
77
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务