題目:將1個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
分析:對n進行分解質因數,應先找到1個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等于n,則說明分解質因數的進程已結束,打印出便可。
(2)如果n>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復履行第1步。
(3)如果n不能被k整除,則用k+1作為k的值,重復履行第1步。
public class ResolvePrime { public static void main(String[] args) { System.out.println(resolvePrime(90)); System.out.println(resolvePrime(134)); System.out.println(resolvePrime(81)); } /** * 分解質因數 * @param num 待分解的數字 * @return 分解后的數字結果 */ public static String resolvePrime(int num) { // 定義結果字符串緩存對象,用來保存結果字符 StringBuffer sb = new StringBuffer(num + "="); // 定義最小素數 int i = 2; // 進行展轉相除法 while (i <= num) { // 若num 能整除 i ,則i 是num 的1個因數 if (num % i == 0) { // 將i 保存進sb 且 后面接上 * sb.append(i + "*"); // 同時將 num除以i 的值賦給 num num = num / i; // 將i重新置為2 i = 2; } else { // 若沒法整除,則i 自增 i++; } } // 去除字符串緩存對象最后的1個*,將結果返回 return sb.toString().substring(0, sb.toString().length() - 1); } }
輸出結果90=2*3*3*5 134=2*67 81=3*3*3*3