[算法] 分解质因数
2014-11-30 19:28
218 查看
也不知道这个算不算算法,但是确实有使用价值。
举例:
把一个整数分解为几个因数相乘的形式,如,19000=2*2*2*5*5*5*19。
一看很简单,但是真的敲键盘的时候就会考虑很久。
实现源码:
测试:
这个也是个很巧妙的算法。
突然想到一个在大一的时候就做过的问题,现在用这个感觉会简单到不行了。
就是一个找零的问题,大概是这样描述的:
一张面值随意的人民币,在付款后找零该如何操作。(其实应该还有一些什么使用张数最少之类的限制,不讨论了)
此处相当于用已有面值来凑需要找零的面额。
那么就是把上述代码中的k值限定,k值取指定的数据即可,如k={2,5,10,20}.
代码:
算法和以上分解的思路是一样的,结果:
举例:
把一个整数分解为几个因数相乘的形式,如,19000=2*2*2*5*5*5*19。
一看很简单,但是真的敲键盘的时候就会考虑很久。
实现源码:
private String coreMethod(int num) {//输入要分解的数 int k = 2;//设定初始因数 StringBuilder sb = new StringBuilder(num+"=");//结果 while(k<=num){ if(k == num){//如果传入的参数为2,也就是最小质因数,那么可以直接返回即可 sb.append(k); break; }else if(num % k == 0){//判断k是否为num的因数 sb.append(k+"*"); num = num/k;//懂的 }else k++; } return sb.toString(); }
测试:
这个也是个很巧妙的算法。
突然想到一个在大一的时候就做过的问题,现在用这个感觉会简单到不行了。
就是一个找零的问题,大概是这样描述的:
一张面值随意的人民币,在付款后找零该如何操作。(其实应该还有一些什么使用张数最少之类的限制,不讨论了)
此处相当于用已有面值来凑需要找零的面额。
那么就是把上述代码中的k值限定,k值取指定的数据即可,如k={2,5,10,20}.
代码:
private String coreMethod(int num) { int k = 0; int [] data = {100,50,20,10,5,2,1}; StringBuilder sb = new StringBuilder(num+"="); while(0<=num){ if(0 >= num){ break; }else if(num >= data[k]){ sb.append(data[k]); num = num-data[k]; if(num != 0) sb.append("+"); }else k++; } return sb.toString(); }
算法和以上分解的思路是一样的,结果:
相关文章推荐
- 蓝桥杯 算法设计_6 分解质因数
- poj1811(miller_robin和pollard分解因数的随机性算法)
- 经典算法100例 6 分解质因数
- 【算法学习笔记】82.素数生成 数据范围利用 SJTU OJ 1020 分解质因数
- 常用的算法:求闰年,判断素数,分解质因数,完数,水仙花数等
- 算法每日一题:3、因数分解
- 大数因数分解Pollard_rho 算法
- 数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429
- 根据要求求除数的数 与 互素和算法 (的品质因数和欧拉函数分解)
- 100经典算法之(三)---分解质因数
- 大数因数分解Pollard_rho 算法详解
- 【快速因数分解】Pollard's Rho 算法
- ADV-69算法提高-质因数
- 改进的经验模态分解(MEEMD)与排列熵(PE)算法和MATLAB程序视频
- [算法]正整数分解为几个连续自然数之和
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 面试题:将一个正整数分解质因数,例如:输入90,打印出90=2*3*3*5.
- 质因数分解 PLUS 因数分解
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5(java)
- 算法笔记(问题分解,分治与动态规划)