java 分解质因数
算法目的:对一个正整数分解质因数
一、算法分析:
1、建立整数列表,保存求到的因数。
2、声明整数i=2,用以递增取模;整数m,用于临时保存n
3、建立while循环,i小于等于整数m时,判断m%i,如果等于0,可以被整除,则令 m = m/i 将 i添加到 整数列表;如果m%i不等于0,i++
4、判断整数列表长度,如果长度为1,则认定n是质数;否则为合数并打印列表
5.加入n的开方值比较,如果i 递增到n的开方值但整数列表的大小仍为0,则认为此数是质数
二、运算结果抢先看
三、基础程序
package fundamental; import java.util.ArrayList;
import java.util.List; public class Seperate { public static void main(String[] args) {
getZ(102039);
}
/*
对n分解质因数,首先找到最小质因数k,如果k==n,直接打印退出。
n<>k,继续k+1对n进行分解
*/
public static void getZ(int n){
List<Integer> l = new ArrayList<Integer>();
int i = 2,m = n;
long start = System.currentTimeMillis();
while(i<=m){ // i<=m 与 i<=n 在运算合数时,效率差很多
if(m%i==0){
m=m/i;
l.add(i);
}else i++;
}
long end = System.currentTimeMillis();
// 0x7fffffff 是 质数,所以i值会累加到 0x7fffffff,比较耗时。但不会超过9秒,因为i值最多累加到0x7fffffff
// 运算时长与n值大小无关,与最大因数有关。
// 最大因数越大,运算越慢,反之越快。
System.out.println("用时:"+(end-start)+"毫秒"); if(l.size()==1) System.out.println(n+"是质数");
else System.out.println(l.toString());
}
}
四、优化算法
加入开方值比较,减少时间复杂度
package fundamental; import java.util.ArrayList;
import java.util.List; public class Seperate { public static void main(String[] args) {
getZ(0x7fffffff);
}
/*
对n分解质因数,首先找到最小质因数k,如果k==n,直接打印退出。
n<>k,继续k+1对n进行分解
*/
public static void getZ(int n){
List<Integer> l = new ArrayList<Integer>();
int i = 2,m = n;
long start = System.currentTimeMillis();
// sqrt 用以减少比较时间
int sqrt = (int) Math.sqrt(n);
while(i<=m ){ // i<=m 与 i<=n 在运算合数时,效率差很多
if(m%i==0){
m=m/i;
l.add(i); }else i++; /*
以下一行是优化算法:
如果 i 超过 sqrt 还没有因数存在,则认为是质数,跳出循环
因为 n 如果是两个质数的乘积,i值需要递增到sqrt才能判断出n是否为质数
*/
if(i>sqrt) {
if(l.size()==0) System.out.println(n+"是质数");
else l.add(m);
break;
}
}
long end = System.currentTimeMillis(); // 0x7fffffff 是 质数,所以i值会累加到 0x7fffffff,比较耗时。但不会超过9秒,因为i值最多累加到0x7fffffff
// 运算时长与n值大小无关,与最大因数有关。
// 最大因数越大,运算越慢,反之越快。
System.out.println("用时:"+(end-start)+"毫秒"); if(l.size()==0) System.out.println(n+"是质数");
else System.out.println(l.toString());
}
}
java 分解质因数的更多相关文章
- java分解质因数
package test; import java.util.Scanner; public class Test19 { /** * 分析:对n进行分解质因数,应先找到一个最小的质数k * 最小 ...
- java 分解质因数 基础增强
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 为了熟悉加强基础练习,搞搞经典小demo..话不多说,直接贴代码,看注释.package www.test;import j ...
- java分解质因数,具体程序分析和代码
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 将一个正整数分解质因数分析:对n进行分解质因数,找到最小的质数k如果这个质数恰好等于n则说明分解质因数过程已经结束,打印输出 ...
- java求最大公约数(分解质因数)
下面是四种用java语言编程实现的求最大公约数的方法: package gcd; import java.util.ArrayList; import java.util.List; public c ...
- Java经典案例之-“分解质因数”
/** * 描述:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. * 分析: * 对n进行分解质因数,应该先找到一个最小的质数k,然后按照下列步骤进行: * (1)如果这个质数恰 ...
- java从键盘输入数,分解质因数,
总结:1.break;的用法 当最小质因数不能被输入的值整除时,需要继续循环.k++. 当然输入的数,本身就是质数时,那么 package com.b; import java.util.Scanne ...
- java代码分解质因数
总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...
- Java基础50题test4—分解质因数
[分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1)如果这个质数恰 ...
- JAVA 基础编程练习题4 【程序 4 分解质因数】
4 [程序 4 分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1) ...
随机推荐
- SQL语言(二) java怎样连接操作数据库中的数据
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...
- 电子笔记本的思考(1)(ver0.3)
章节:电子笔记本的思考(1) 陶哲轩在<解题·成长·快乐——陶哲轩教你学数学>中着重强调,用纸笔来“缓存”思维对于数学解题的重要性: 用选定的符号表达你所知道的信息,并画一个示意图.把 ...
- hdu 1068 Girls and Boys 最大独立点集 二分匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 思路: 求一集合满足,两两之间没有恋爱关系 思路: 最大独立点集=顶点数-最大匹配数 这里给出的 ...
- HDU 1216 Assistance Required 埃拉托色尼色筛法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216 思路:色筛法 代码(1): #include<iostream>//-------- ...
- 如何在HTTP头中隐藏PHP版本号
PHP 配置默认允许服务器在 HTTP 响应头 X-Powered-By 中显示安装在服务器上的 PHP 版本.出于服务器安全原因(虽然不是主要的要担心的威胁),建议你禁用或隐藏此信息,避免那些针对你 ...
- Mysql服务器SQL模式 (官方精译)
MySQL服务器可以在不同的SQL模式下运行,并且可以根据sql_mode系统变量的值对不同的客户端应用不同的模式.DBA可以设置全局SQL模式以匹配站点服务器操作需求,并且每个应用程序可以将其会话S ...
- 利用KindEditor实现公司通讯录的维护
引言: 本人所属施工单位,在建项目较多,通讯录是以项目为单位挂接在公司内部网站通讯录板块,以静态页面展示.一直以来都是项目部办公室通过电话.邮件等方式通知总部信息部门变更通讯录,日常维护的工作量较大. ...
- 小白的Python之路 day1 Python3的bytes/str之别
原文:The bytes/str dichotomy in Python 3 Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二 ...
- 如何配置 Health Check?- 每天5分钟玩转 Docker 容器技术(107)
容器状态是 UP 的,应用就是健康的吗? 还真不一定!Docker 只能从容器启动进程的返回代码判断其状态,而对于容器内部应用的运行情况基本没有了解. 执行 docker run 命令时,通常会根据 ...
- Python笔记·第一章—— Python基础(一)
一.Python的简介 1.Python的由来与版本 1.1 python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文 ...