欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Java对一个自然数进行因式分解

程序员文章站 2022-05-28 18:02:15
...

问题

给定一个自然数,返回其因式分解,如:

35: [5, 7]
28: [2, 2, 7]
46: [2, 23]
512: [2, 2, 2, 2, 2, 2, 2, 2, 2]
320: [2, 2, 2, 2, 2, 2, 5]
3234: [2, 3, 7, 7, 11]

算法

对指定的自然数进行循环,每次循环中使用计数器i与之求余,如果可以整除则进行记录到一个List中,当除的值最终为1时,循环结果,最后将计算结果输出。

代码

import java.util.ArrayList;

public class Test{

    public static void main(String[] args)throws Exception{
        
        if(args.length > 0){
            int n =  Integer.parseInt(args[0]);
            System.out.print(n + ": ");
            print(factorial(n));
        }

        var nums = new int[]{35, 28, 46, 512, 320, 3234};
        for(var n: nums){
            System.out.print(n + ": ");
            print(factorial(n));
        }
    }

    /**
     * 对自然数 n 进行因式分解,n 如果小于2,则报错。
     * @param n 待分解的自然数n
     * @return
     */
    static ArrayList<Integer> factorial(int n) throws Exception {
        if(n <2){
            throw new Exception("输入的自然数必需大于2.");        
        }

        var list = new ArrayList<Integer>();
        while(n > 1){
            for(int i = 2; i <= n; i++){
                if(n % i == 0){
                    list.add(i);
                    n /= i;
                    break;
                }
            }
        }

        return list;
    }

    /**
     * 显示一个 ArrayList<Integer> 对象,格式为 [v1, v2,..., vn]
     * @param list
     */
    static void print(ArrayList<Integer> list){
        System.out.print("[" + list.get(0));
        for(int i = 1; i < list.size(); i++)
            System.out.print(", " + list.get(i));
        System.out.println("]");
    }
    

}