题解 | #质数因子#

质数因子

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

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    static ArrayList<Integer> factors = new ArrayList<>();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        // 如果不是合数,就没有必要进行因式分解
        if (!isPrime(num)) {
            factorization(num);
            for (Integer factor : factors) {
                System.out.print(factor + " ");
            }
        } else {
            System.out.println(num);
        }
    }

    // 判断是不是质数
    private static boolean isPrime(int num) {
        boolean flag = true;
        // 若存在一个因数则不是质数
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                flag = false;
                break;
            }
        }
        return flag;
    }

    // 寻找质因子的方法
    // 递归寻找
    private static void factorization(int num) {
        // 一个数经过多次因数分解,最后的时候相当于是自身也会变成一个质数
        if (isPrime(num)) {
            factors.add(num);
            // 到达递归的终点
            return;
        }
        for (int i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                factors.add(i);
                factorization(num / i);
                break;
            }
        }
    }
}

全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务