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); }}