java基础练习:质数分解

import java.util.ArrayList;


/**
 * @author cherhio
 * @date Created in 2019-05-05 10:55
 *
 * 题目:将一个正整数分解质因数。
 * 例如:输入90,打印出90=2*3*3*5。
 */
public class solution {
    public static void main(String[] args) {
        decomposedPrimeNumber(90);
    }


    /**
     * 分解质因数
     * @param n
     */
    public static void decomposedPrimeNumber(int n){
        ArrayList list = new ArrayList();


        /*
        程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
        (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
        (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
        (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
         */

        //找到一个最小的质数k
        int k = 0;
        for (int i = 2; i < n; i++) {
            if (isPrime(i)){
                k = i;
                break;
            }
        }

        //保留原始数,方便打印的时候展示
        int i = n;


        //(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
        while (k != n){
            //(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
            if (n != k && n % k == 0){
                list.add(k);
                n = n / k;
            }else {
                //(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
                k = k + 1;
            }
        }
        list.add(k);
        print(i,list);
    }


    /**
     * 打印结果的方法
     * @param list
     */
    public static void print(int result,ArrayList list){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1){
                String str = String.valueOf(list.get(i));
                sb.append(str);
            }else {
                String str = String.valueOf(list.get(i)) + "*";
                sb.append(str);
            }
        }
        System.out.println(result+"="+sb);
    }

    /**
     * 判断质数的方法
     * @param n
     * @return
     */
    public static boolean isPrime(int n){
        for (int i = 2; i < n; i++) {
            if (n % i == 0){
                return false;
            }
        }
        return true;
    }

}



输出结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44355126/article/details/89843721