將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。


題目:將一個正整數分解質因數。例如:輸入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; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM