计算题:分解质因数
来源:互联网 发布:高清网络监控系统方案 编辑:程序博客网 时间:2024/04/29 02:18
问题:
每个合数都可以写成几个质数相乘的形式。其中每个质数是这个合数的因数,叫做这个合数的分解质因数。
输出样例:
输入样例:28;
输出样例:28 = 2 * 2 * 7;
分析:
1、合数是相对于质数(素数)的概念;
2、可以先对这个合数进行任意分解(i,j);
3、对分解出来的因数分别进行判断,如果为素数则记录为结果之一进行输出,如果不是则继续分解,直至分解到不能在分解(最小的素数为2,即传入的参数不能小于2);
4、综上分析使用递归解决:
出口:传入参数小于2则停止;
函数体: 如果传入的参数不为素数,则进行分解;
递归调用: 分解后调用自身;
完整代码实现:
#include <iostream>#include <vector>using namespace std;vector<int> vec;void fen_jie(int num){ int code = 0; if (num < 2) return; for (int i = 2; i < num; ++i) { if (num % i == 0) { code = i; break; } } if (code == 0) { vec.push_back(num); return; } else {// for (int i = 2; i < num; ++i)// {// if (num % i == 0)// {// fen_jie(i);// fen_jie(num / i);// break;// }// } fen_jie(code); fen_jie(num / code); }}void show(int num){ cout << num << " = "; for (vector<int>::size_type ix = 0; ix != vec.size(); ++ix) { cout << vec[ix]; if (ix < vec.size() - 1) cout << " * "; } cout << endl; return;}int main(){ int num; while(cin >> num) { fen_jie(num); show(num); vec.clear(); } return 0;}
代码解释:
1、在主函数中输入一个num参数,将num作为实参传入fen-jie函数中,进项运算;
2、num传入后,首先进行判断是否满足出口条件,然后判断是否为素数,判断完成后如果是则写入vec容器中,如果不是则再分解,然后调用自己;
3、在素数判断这部分,没有使用传统手法上的遍历判断,而是一旦发现有可以整除的其他因数时就记录下来(用code记录是因为方便下面的合数分解)然后停止判断;如果code的值不变则说明是素数,如果发生变化则说明不是素数,需要进行下一步分解,此时便用到了刚才code所记录下来从此小到大第一个因数,就可以将此合数分解为,code 和 num/code;
4、在调用完fen-jie之后,调用show函数进行输出;
5、因为本例中设置为循环输入测试,所以每次循环运算完成之后需要将vector重置,否则会将之前的答案一并输出;
- 计算题:分解质因数
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 计算题
- 有意思的计算题
- 计算题--第二次作业
- 第二周计算题
- 第二次作业计算题
- hdu 3046 Pleasant sheep and big big wolf(最小割)
- (POJ 3281)Dining --最大流,匹配建图,Dinic
- 2016.07.30 --月总结
- Nginx虚拟主机配置
- Node.js简介
- 计算题:分解质因数
- 火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
- android ADT学习总结
- Hibernate高级查询方法
- 【HDU5700 区间交】
- TimeManagerMent Techique
- 加密解密系列文章之 - ASCII 加密解密(最简单的加密解密) 下
- python \的作用是继续
- Linux ps -ef 排除当前进程(kill当前Tomcat进程)