java分解质因数的方法 [源代码分享]
概念:每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 质数本身已不能再分,故分解质因数只针对合数。
以下为java源码:
import java.util.ArrayList;
/**
* 分解质因数
* @url https://www.yangshengliang.com/biancheng-kaifa/java-jiancheng/527.html
* @author fedkey
* @blog www.yangshengliang.com
*
*/
public class GetFactor {
private static ArrayList<Integer> factorArr = new ArrayList<>(); // 存放质因数
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int num = 2000000000;
GetFactor.getFactor(num);
// 计时
long endTime = System.currentTimeMillis();
System.out.print(num + "分解质因数为:\t" + factorArr);
System.out.print("\n");
System.out.println("GetFactor()执行耗时:" + (endTime - startTime) + "ms");
}
public static void getFactor(int num) {
if (isPrime(num)) {
factorArr.add(num);
}
for (int n = 2; n <= num / 2; n++) {
if (isPrime(n) && num % n == 0) {
int c = num / n;// 商
factorArr.add(n);
if (!isPrime(c)) {
getFactor(c);
} else {
factorArr.add(c);
}
break;
}
}
}
/**
* 判断是否是质数
*
* @param num
* @return
*/
public static boolean isPrime(int num) {
int n = 2;
boolean flg = true;
if (num < 2) {
flg = false;
}
for (; n <= Math.sqrt(num); n++) {
if (num % n == 0) {
flg = false;
}
}
return flg;
}
}
源码分析:
1.用>=2的质数做除(相对于合数,质数毕竟是少数,避免不必要的计算)数去除,如果能除完,则该质数是该合数的一个质因数,加入到 factorArr中;
2.检测商是否是质数,如果是质数,将直接放入结果集 factorArr中,程序结束;
3.如果商是合数,则再次分解(递归调用getFactor(int num)方法),直到商为质数不可再分为止。
可支持亿级的合数分解质因数,速度很快。
例中把待分解质因数的合数设置为:2000000000(20亿),耗时4毫秒,得到结果如图:

更多阅读
- google chrome for linux 最新版下载地址
- ubuntu 火狐(Firefox)安装flash player 播放网页视频
- Linux (gvim:6883): Gtk-WARNING **: Invalid input string错误解决
- 百度UEditor-KityFormula for wordpress 2.0.1发布
- 小鸿百度站长收录批量提交工具
- ubuntu 14.04 安装openjdk 8(亲测成功)
- nginx服务器屏蔽网络爬虫程序采集器的办法
- 编译c语言源文件为python ctypes可调用的so库文件提高python性能(实例讲解)
- google chrome浏览器解除右键限制
- debian升级到testing – 让debian系统永远保持最新的秘诀

qq:1535604235


QQ
微信
商店
衣皇后
2016年12月25日 下午2:33
掐指一算,这个博客能风光一百年!
三五营销
2016年12月21日 下午1:52
偶然来访,受益良多!