题解 | #质数因子#

质数因子

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long num = Long.parseLong(scan.next());
        getPrimeFactors(num);
    }

    public static void getPrimeFactors(long num) {
        // 处理2,因为它是唯一的偶数质数
        if (num % 2 == 0) {
            System.out.print(2 + " ");
            getPrimeFactors(num / 2);
            return;
        }

        // 处理奇数质因数
        for (long i = 3; i * i <= num; i += 2) {
            while (num % i == 0) {
                System.out.print(i + " ");
                num /= i;
            }
        }

        // 如果num大于2,那么它本身是一个质数
        if (num > 2) {
            System.out.print(num);
        }
    }
}

  1. 首先处理偶数质因数2,因为它是唯一的偶数质数,而且这样可以让剩余的数保证是奇数。
  2. 然后通过循环处理所有的奇数质因数,从3开始,每次递增2(跳过偶数),只检查到 sqrt(num)
  3. 使用递归来处理除以当前质因数后的结果。
  4. 当没有更多的质因数可以找到时,如果 num 大于2,那么它本身是一个质数,打印出来。
  5. 这种方法确保了所有质因数都被找到并打印,同时避免了不必要的计算。
#笔试题解#
全部评论

相关推荐

大叔叔1:你把自己说的话打码,所以你想表达什么
点赞 评论 收藏
分享
02-23 00:10
湖南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务