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

JAVA素数分解的更多相关文章

  1. HDU_3071 Gcd & Lcm game 【素数分解 + 线段树 + 状压】

    一.题目  Gcd & Lcm game 二.分析 非常好的一题. 首先考虑比较暴力的做法,肯定要按区间进行处理,对于$lcm$和$gcd$可以用标准的公式进行求,但是求$lcm$的时候是肯定 ...

  2. java字符串分解 StringTokenizer用法(比split()方法效率高)

    Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. int countTokens ...

  3. java字符串分解 StringTokenizer用法

    Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. 先看个例子: 1 public ...

  4. hdu 3864 素数分解

    题意:求n是否只有4个因子,如果是就输出除1外的所有因子. 模板题,就不排版了 #include<cstdio> #include<iostream> #include< ...

  5. nefu 118 n!后面有多少个0 算数基本定理,素数分解

    n!后面有多少个0 Time Limit 1000ms Memory Limit 65536K description 从输入中读取一个数n,求出n! 中末尾0的个数. input 输入有若干行.第一 ...

  6. java代码分解质因数

    总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...

  7. POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...

  8. Java 素数 prime numbers-LeetCode 204

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  9. hdu4497 GCD and LCM ——素数分解+计数

    link:http://acm.hdu.edu.cn/showproblem.php?pid=4497 如果G%L != 0,说明一定无解. 把K = G / L质数分解,G / L = p1^t1 ...

随机推荐

  1. 拿搬东西来解释udp tcpip bio nio aio aio异步

     [群主]雷欧纳德简单理解 tcpip是有通信确认的面对面通信   有打招呼的过程  有建立通道的过程 有保持通道的确认    有具体传输udp是看到对面的人好像在对面等你 就往对面扔东西[群主]雷欧 ...

  2. C语言文法 改

    <程序> ->  <外部声明> |  <程序>  <外部声明> <外部声明>  ->   <函数定义>  |  &l ...

  3. Android IOS WebRTC 音视频开发总结(二七)-- whatsapp之转发优先

    最近看了一篇老外在webrtcHacks上写的文章,主要介绍webrtc和whatsapp的传输机制,蛮好的,加上自己的理解进行总结, 希望对大伙有所帮助,转载请说明出处,原文来自博客园RTC.Bla ...

  4. Android IOS WebRTC 音视频开发总结(十八)-- 手机适配

    本文主要介绍上次碰到的某些机器上看不到视频的问题,文章来自博客园RTC.Blacker,转载请说明出处. 之前做的视频聊天App一直运行良好,前几天客户反馈说在三星9100. Android4.0.3 ...

  5. 爱之初体验---编译加载内核模块hello

    1. hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h ...

  6. Connect to a Windows PC from Ubuntu via Remote Desktop Connection

    http://www.7tutorials.com/connecting-windows-remote-desktop-ubuntu A useful feature of Windows is be ...

  7. C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果

    今天在做项目时,看到一软件做的悬浮框效果不错,从网上搜罗了一些资料,未见到有十分好的解决办法,只能自已动手,利用datagridview 的ToolTipText 来达到此效果. 以下是我简单实现的代 ...

  8. 前端构建工具grunt

    简单配置grunt 配置gulp还是grunt都是在node的环境下安装的,所以在这之前保证你的node环境已经安装好了! -------------------------------------- ...

  9. Java TCP异步数据接收

    之前一直采用.Net编写服务端程序,最近需要切换到Linux平台下,于是尝试采用Java编写数据服务器.TCP异步连接在C#中很容易实现,网上也有很多可供参考的代码.但Java异步TCP的参考资料较少 ...

  10. Spark和Hadoop作业之间的区别

    Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么在内部实现Spark和Hadoop作业模型都一样吗?答案是不对的. 熟悉Hadoop的人应该都知道 ...