码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-31 00:54:29      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:结束   int   第一步   void   false   不能   size   sqrt   步骤   

题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

 

public class 第四题分解质因数 {
    public static void main(String[] args) {
        System.out.print("请输入一个正整数进行因数分解:");
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if(n < 0) n = -n;
        //获取最小质数k
        int k = getMinPrime(n);
        System.out.print(n+"=");
        decompositionFactor(n, k);
        in.close();
    }
    //质因数分解一次
    public static int decompositionFactor(int n,int k) {
        if(n==k) {
            System.out.print(n);
            return n;
        }
        while(n != k) {
            if(n>k && n%k==0) {
                System.out.print(k+"*");
                return decompositionFactor(n/k, getMinPrime(n/k));
            }                 
            k++;
        }
        return n;
    }
    //判断一个数是否为素数
    public static boolean isPrime(int n) {
        for(int i=1; i<=Math.sqrt(n); i++) {
            if(n == 2) {
                return true;
            }
            //不是素数
            if(n % 2 == 0) {
                return false;
            }
        }
        return true;
    }
    //返回一个最小的质数
    public static int getMinPrime(int n){
        for(int i=2; i<=Math.sqrt(n); i++) {
            if(n % i == 0 && isPrime(i)) {
                return i;
            }
        }
        return n;
    }
}

 

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

标签:结束   int   第一步   void   false   不能   size   sqrt   步骤   

原文地址:https://www.cnblogs.com/zjulanjian/p/10952751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!