题解 | #质数因子#--暴力破解

质数因子

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int num = in.nextInt();
            List<Integer> result = new ArrayList<>();
            // 先判断是否为质数
            if (isPrime(num)) {
                System.out.println(num);
            } else {
                // 递归判断暴力破解
                getResult(num, result);
                result.sort(Integer :: compareTo);
                result.forEach(res -> {
                    System.out.print(res + " ");
                });
            }
        }
    }

    private static void getResult(int num, List<Integer> result) {
        if (isPrime(num)) {
            result.add(num);
            return;
        }
        if (num % 2 == 0) {
            result.add(2);
            getResult(num / 2, result);
        } else if (num % 3 == 0) {
            result.add(3);
            getResult(num / 3, result);
        } else if (num % 5 == 0) {
            result.add(5);
            getResult(num / 5, result);
        } else if (num % 7 == 0) {
            result.add(7);
            getResult(num / 7, result);
        } else if (num % 11 == 0) {
            result.add(11);
            getResult(num / 11, result);
        } else if (num % 13 == 0) {
            result.add(13);
            getResult(num / 13, result);
        } else if (num % 17 == 0) {
            result.add(17);
            getResult(num / 17, result);
        } else if (num % 19 == 0) {
            result.add(19);
            getResult(num / 19, result);
        } else if (num % 23 == 0) {
            result.add(23);
            getResult(num / 23, result);
        }else if (num % 107 == 0) {
            result.add(107);
            getResult(num / 107, result);
        }
    }

    // 判断一个数是否为质数
    private static boolean isPrime(int num) {
        if (num <= 3) {
            return true;
        }
        int sqrt = (int) Math.sqrt(num);
        // 是否能被小于等于sqrt的数整除
        for (int i = 2; i <= sqrt; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-29 12:06
点赞 评论 收藏
分享
炫哥_:为什么都读硕士了?项目还是网上的项目(真心发问)
最后再改一次简历
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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