题目4:将一个正整数分解质因数

题目:

将一个正整数分解质因数。
  例如:输入90,打印出90=233*5。

程序分析:

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

方法一程序代码:

package com.ljy.tencent;
import java.util.Scanner;
/**
 * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
 * 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
 * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
 * (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
 * (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
 * @author liaojianya
 * 2016年10月2日
 */
public class QualityFactorsDecompose
{
    public static void main(String[] args)
    {
        System.out.println("请输入需要分解的正整数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(n + "分解质因数如下:");
        System.out.print(n + "=");
        deposition(n);
        input.close();
    }

    public static void deposition(int n)
    {
        //判断该数是否为1,若是,直接打印。
        if(n == 1)
        {
            System.out.println(n);
        }
        else
        {
            for (int i = 2; i <= n; i++)
            {
                //如果n能够被从2开始的i整除,则i即为n的最小质数。
                if (n % i == 0)
                {    //如果此时n == i说明n的最小质数即为本身
                    if (i == n)
                    {
                        System.out.print(i);
                        break;
                    }
                    else
                    {
                        System.out.print(i + "*");
                        //使用迭代寻找商的最小质数。
                        deposition(n / i);
                        break;
                    }
                }
            }
        }
    }
}

结果输出:

请输入需要分解的正整数:
20
20分解质因数如下:
20=2*2*5

方法二程序代码:

package com.ljy.tencent;
import java.util.Scanner;
/**
 * 不适用迭代的方法
 * @author liaojianya
 * 2016年10月2日
 */
public class Test1{
    public static void main(String[] args)
    {
        System.out.println("请输入需要分解的正整数:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(n + "分解质因数如下:");
        deposition(n);
        input.close();
    }
    private static void deposition(int n){
        System.out.print(n+"=");
        for(int i=2;i<n+1;i++){
            while(n%i==0 && n!=i){
                n/=i;
                System.out.print(i+"*");
            }
            if(n==i){
                System.out.println(i);
                break;
            }
        }
    }
}

    原文作者:Andyanet
    原文地址: https://www.jianshu.com/p/149ee7e005d5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞