Javaの基本的な算術の質問(04):品質係数の正の整数分解。たとえば、次の入力90は、90 = 3 * 2 * 3 * 5を印刷します。

すべての50個の基本的な算術の質問を見る、以下を参照してください。

50個の質問のJavaの基本的なアルゴリズム

素数が正確にn個に等しい場合(1)、次いで、素因数分解プロセスが完了した、それはプリントアウトすることができます。
(2)もしN <> K、Nが、kはkの値を印刷する必要が分割することができ、kは新しい正の整数nは、最初のステップが繰り返し実行されるように、使用nで分割されています。
nはkで割り切れない場合(3)において、k + 1はkの値として使用され、最初のステップが繰り返し実行されます。

package Demo04Prime_Factorization;
import java.util.ArrayList;
import java.util.Scanner;
public class Prime_Factorization {
    /**
     *  将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
     * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
     * (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
     * (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
     */
    /*
    分析(小学知识复习):
        质数的概念:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是除了1和它自身,不能被其他数整除。
        合数的概念:与质数正好相反,就是除了1和它自身以外,还可以被别的数整除。最小的合数是4。
        最小的质数是2,所以分解一个合数的质因数,则从2开始试除,如果余数为0,则2就是质因数之一,把2记录下来,把商作为一个合数继续
        分解,如果余数不为零,则应该加一,也就是试除3,如果余数为0,则3又是质因数之一,记录,把商又作为一个合数来分解,依次类推……
     */
    public static void main(String[] args) {
        System.out.println("请输入你要分解的合数: ");
        // Scanner类获取用户输入的一个合数
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        System.out.println("分解结果===========================");
        // 定义一个集合来接收Prime_Factors()方法返回的list集合
        ArrayList<Long> list = Prime_Factors(num);
        // 打印该合数的所有质因数
        System.out.println("该合数的质因数集合为:");
        System.out.println(list);
        // 遍历所有的质因数集合,就乘积,验证通过方法调用得到的分解质因数结果对不对,可以不写
        long pro=1;
        for (int i = 0; i < list.size(); i++) {
            pro=list.get(i)*pro;
            // 格式化打印结果
            if(i==0){
                System.out.print(list.get(i));
            }else if(i==list.size()-1){
                System.out.println("*"+list.get(i)+"="+num);;
            }else{
                System.out.print("*"+list.get(i));
            }
        }
        System.out.println("----------------------------------");
        // 输出判断结果
        if(pro==num){
            System.out.println("本次分解质因数结果已经经过验证,结果正确!");
        }
    }
    /**
     * 将用户输入的合数传递给方法,最后返回一个含有该数所有质因数的集合。
     * @param num
     * @return
     */
    public static ArrayList<Long> Prime_Factors(long num){
        // 定义一个集合来盛这些质因数
        ArrayList<Long> list = new ArrayList<>();
        // 定义一个变量装商值
        long n = num;
        // 定义质因数变量,从2开始
        long k = 2;
        // 开始循环,遍历2~n的所有数,注意这个n是时刻变化的
        while(k<=n){
            // 如果这个质因数就等于这个数,说明该数是一个质数,直接记录并退出循环
            if(k==n){
                list.add(n);
                break;
            }
            // 如果n可以被k整除,则k是n的质因数,记录这个质因数,并且把商值重新赋给n,k回到原点,重新开始
            if(n%k==0){
                list.add(k);
                n=n/k;
                k=2;
            // 如果n不能被k整除,则k不是n的质因数,k+1,再去除
            }else{
                k++;
            }
        }
        // 返回这个数的质因数集合
        return list;
    }
}
公開された22元の記事 ウォンの賞賛1 ビュー1428

おすすめ

転載: blog.csdn.net/weixin_44803446/article/details/105354706