JAVA素数分解
2024-10-15 04:12:02
package test;
import java.util.*; public class test1 {
public static void main(String[] args){
long t1 = System.currentTimeMillis();
System.out.println(factor(100));
System.out.println(factor(18900));
System.out.println(factor(72057554846356433L));
System.out.println(factor(72057554846356487L));
long t2 = System.currentTimeMillis();
System.out.println("耗时:" + (t2-t1));
} public static Map<Long, Integer> factor(long n){
Map<Long,Integer> result = new HashMap<Long,Integer>();
long t = n;
//先处理偶数,后面处理时 i步进=2,可以节省一半时间
while (t%2==0){
result.put(2L,result.get(2L)==null ? 1:result.get(2L)+1);
t = t/2;
}
for (long i=3;i<=Math.sqrt(t);){
if (t%i==0){
result.put(i,result.get(i)==null ? 1:result.get(i)+1);
t = t/i;
}else{
i += 2;
}
}
result.put(t,result.get(t)==null ? 1:result.get(t)+1);
t = 1;
//return null;
return result;
}
}
1、先把合数分解成2和第二个因数,直到第二个的因数不是偶数,那么分解第二个因数时,步进=2,减少一半判断;
2、分解时,因数小于等于 Math.sqrt(t);
上面代码试验中,比从2开始步进1的方法快一倍(5700ms vs 2700ms);
最新文章
- Daily Scrum Meeting ——FirstDay(Beta)12.09
- [转载] Jenkins入门总结
- 干货|宏巍软件之Java线程监控之旅
- java的基本结构
- NOIP 2013 货车运输【Kruskal + 树链剖分 + 线段树 】【倍增】
- bigworld源码分析(4)——BaseAppMgr分析
- iOS字体设置
- intent传递参数
- cordova,phonegap 重力感应
- luajit 安装cjson
- 利用js得到某个范围内的整数随机数
- DataReader和DataSet的区别以及使用
- [Luogu2664]树上游戏
- hdu 2254(矩阵)
- body里面的onload和window.onload,window.load的区别
- tomcat启动慢
- div和span标签
- 剑指Offer_编程题_9
- 剑指offer——python【第16题】合并两个有序链表
- [HNOI/AHOI2018]转盘
热门文章
- Qt Meta Object System-元对象系统
- 简单的使用AngularJS的解析JSON
- 背景图片background-size兼容ie8以下浏览器解决
- Overcome the Dilemma of ";unlock"; and ";trust";
- centos6.5_x86_64安装Adobe Flash Player
- javac 不是内部或外部命令
- objective-C常量与变量
- HTML5高防win8风格
- 重拾C,一天一点点_9-指针与数组
- DELPHI 单元文件结构