找出 2024 的最大质因数

package com.cjh.lanqiao;

public class Main28 {
	public static void main(String[] args) {
		//2024最大的质因数
		//首先ans是质数,其次要是2024的因数
		int num = 2024;
        int maxPrimeFactor = 1;
        // 先处理因数2
        while (num % 2 == 0) {
            maxPrimeFactor = 2;
            num /= 2;
        }
        // 处理其他奇数因数
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            while (num % i == 0) {
                maxPrimeFactor = i;
                num /= i;
            }
        }
        // 如果最后num大于2,说明它本身就是一个大于2的质因数
        if (num > 2) {
            maxPrimeFactor = num;
        }
        System.out.println(maxPrimeFactor);
	}
}
  • 2 是质数,此代码块持续将 num 除以 2,直至 num 不能被 2 整除。在此过程中,每次都把 maxPrimeFactor 更新为 2,这就保证了如果 2 是 num 的因数,那么 2 会作为一个质因数被记录。
  • 外层 for 循环从 3 开始,以步长 2 遍历奇数,直到 i 大于 num 的平方根。这里的关键在于,当 num 能被 i 整除时,就把 num 除以 i,直到 num 不能再被 i 整除。
  • 假设 i 不是质数,那它必然可以分解成更小的因数。但由于代码是从小到大遍历因数的,在遇到 i 之前,那些更小的因数就已经把 num 中包含它们的部分除掉了,所以能整除 num 的 i 一定是质数。例如,若 i = 9(非质数),因为 9 能分解成 3×3,在遇到 9 之前,3 就已经把 num 中包含 3 的因数都除掉了,所以 9 不可能再整除 num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值