码迷,mamicode.com
首页 > 编程语言 > 详细

经典算法详解(12)分解质因数

时间:2018-07-17 14:24:05      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:条件   i++   ==   namespace   isp   利用   质因数分解   质因数   pac   

题目:众所周知,任何一个合数(因数不止是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)分解质因数

标签:条件   i++   ==   namespace   isp   利用   质因数分解   质因数   pac   

原文地址:https://www.cnblogs.com/ys99/p/9322793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!