java求質因數演算法

來源:互聯網
上載者:User
public class QualityFactor {    /**     * 因為不管怎麼計算由於非素數數都可以通過1·9中通過乘計算得出所以除了1和2隻需要繼續是否可以被2-9整除就可以     * 這一說法利用了提取最小公因式來計算得出     * 當然要避免一個重要問題就是當它是個位元字的時候也就是1 、 2 、 3 、 5 、7的時候直接返回     * 這樣計算的好處在於避免了傳統遞迴從1到n的反覆計算更加高效的計算出素數面對千位以上的資料使用     * 也避免了過多使用這一演算法(冗餘重複性計算)的:     * 判斷素數的方法:用一個數分別去除2到sqrt(這個數的平方根),如果能被整除, 則表明此數不是素數,反之是素數這一種演算法更加快捷     * 避免了重複計算的冗餘     */    public boolean isPrimeNumber(int divisor, int number) {        if (number % divisor == 0) return false;        else if (number == 1 || number == 2 || number == 3 || number == 5 || number == 7                || number == 11 || number == 13 || number == 17 || number == 19) return true;        else if (number <= 20) return false;        else if (divisor == 9) {            return isPrimeNumber(11, divisor);        } else if (divisor > 9) {            if (divisor < Math.sqrt(number)) {                return isPrimeNumber(divisor + 1, number);            } else if (divisor == Math.sqrt(number)) return false;            else return true;        }        return isPrimeNumber(divisor + 1, number);    }    public void getQualityFactor(int number) {        String out = number + "=";        if (isPrimeNumber(2, number)) out = out + number;        else {            while (number != 1) {                for (int j = 2; j <= number; j++) {                    /*如果每一次Number都能整除j則讓Number/=j*/                    if (number % j == 0) {                        number /= j;                        /*整除完判斷是否是素數這樣就避免了最後剩下一個比較大的素數然後還要進行計算重複計算*/                        if (number!=1){                            out += j + "x";                            if (isPrimeNumber(2,number)){                                out +=  number;                                number = 1;                            }                        }else out +=  j ;                        break;                    }                }            }        }        System.out.println(out);    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.