经典算法详解(12)分解质因数
Posted ys99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法详解(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 << " "; 18 return 1; 19 } 20 else { 21 for (int i = 2; i < n; i++) { 22 if (n%i == 0) { 23 cout << i << " "; 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)分解质因数的主要内容,如果未能解决你的问题,请参考以下文章
数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429