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


題目:眾所周知,任何一個合數(因數不止是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 }

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


免責聲明!

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



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