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);

最新文章

  1. Daily Scrum Meeting ——FirstDay(Beta)12.09
  2. [转载] Jenkins入门总结
  3. 干货|宏巍软件之Java线程监控之旅
  4. java的基本结构
  5. NOIP 2013 货车运输【Kruskal + 树链剖分 + 线段树 】【倍增】
  6. bigworld源码分析(4)——BaseAppMgr分析
  7. iOS字体设置
  8. intent传递参数
  9. cordova,phonegap 重力感应
  10. luajit 安装cjson
  11. 利用js得到某个范围内的整数随机数
  12. DataReader和DataSet的区别以及使用
  13. [Luogu2664]树上游戏
  14. hdu 2254(矩阵)
  15. body里面的onload和window.onload,window.load的区别
  16. tomcat启动慢
  17. div和span标签
  18. 剑指Offer_编程题_9
  19. 剑指offer——python【第16题】合并两个有序链表
  20. [HNOI/AHOI2018]转盘

热门文章

  1. Qt Meta Object System-元对象系统
  2. 简单的使用AngularJS的解析JSON
  3. 背景图片background-size兼容ie8以下浏览器解决
  4. Overcome the Dilemma of &quot;unlock&quot; and &quot;trust&quot;
  5. centos6.5_x86_64安装Adobe Flash Player
  6. javac 不是内部或外部命令
  7. objective-C常量与变量
  8. HTML5高防win8风格
  9. 重拾C,一天一点点_9-指针与数组
  10. DELPHI 单元文件结构