1. 程式人生 > >經典算法詳解(12)分解質因數

經典算法詳解(12)分解質因數

iostream cout 出錯 返回值 clu stream 思路 int getchar()

題目:眾所周知,任何一個合數(因數不止是1和本身)都可以寫成幾個質數相乘的形式,這幾個質數叫做這個合數的質因數。例如,24=2×2×2×3.把一個合數寫成幾個質數相乘的形式叫做分解質因數。對於一個質數,他的質因數可定義為它本身。編寫一個程序實現分解質因數。

C++實現

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int isPrime(int n) {
 6     for (int i = 2; i < n; i++) {
 7         if (n%i == 0)
 8             return
0; 9 } 10 return 1; 11 } 12 13 int getPrimeFactor(int n) { //可以不返回值,此處返回-1表示出錯,返回1表示正常。 14 if (n < 2) 15 return -1; 16 if (isPrime(n)) { 17 cout << n << "\t"; 18 return 1; 19 } 20 else { 21 for (int i = 2; i < n; i++) { 22 if
(n%i == 0) { 23 cout << i << "\t"; 24 getPrimeFactor(n / i); 25 break; 26 } 27 } 28 } 29 return 1; 30 } 31 32 int main(int argc, char *argv[]) { 33 int a; 34 cin >> a; 35 getPrimeFactor(a); 36 getchar();
37 getchar(); 38 return 0; 39 }

思路:首先編寫一個函數用於判斷一個數是否是質數,其次利用遞歸的方法,把一個數除以它最小的質因數的之後的值又是一個要質因數分解的值,問題相同規模縮小,所以是一個遞歸問題,終止條件是該數是一個質數。當是質數或者找到一個最小的質因數時都將其打印出來即可。

經典算法詳解(12)分解質因數