算法目的:对一个正整数分解质因数

一、算法分析:

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 分解质因数的更多相关文章

  1. java分解质因数

      package test; import java.util.Scanner; public class Test19 { /** * 分析:对n进行分解质因数,应先找到一个最小的质数k * 最小 ...

  2. java 分解质因数 基础增强

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 为了熟悉加强基础练习,搞搞经典小demo..话不多说,直接贴代码,看注释.package www.test;import j ...

  3. java分解质因数,具体程序分析和代码

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 将一个正整数分解质因数分析:对n进行分解质因数,找到最小的质数k如果这个质数恰好等于n则说明分解质因数过程已经结束,打印输出 ...

  4. java求最大公约数(分解质因数)

    下面是四种用java语言编程实现的求最大公约数的方法: package gcd; import java.util.ArrayList; import java.util.List; public c ...

  5. Java经典案例之-“分解质因数”

    /** * 描述:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. * 分析: * 对n进行分解质因数,应该先找到一个最小的质数k,然后按照下列步骤进行: * (1)如果这个质数恰 ...

  6. java从键盘输入数,分解质因数,

    总结:1.break;的用法 当最小质因数不能被输入的值整除时,需要继续循环.k++. 当然输入的数,本身就是质数时,那么 package com.b; import java.util.Scanne ...

  7. java代码分解质因数

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

  8. Java基础50题test4—分解质因数

    [分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1)如果这个质数恰 ...

  9. JAVA 基础编程练习题4 【程序 4 分解质因数】

    4 [程序 4 分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1) ...

随机推荐

  1. 【微软大法好】VS Tools for AI全攻略(3)

    接着上文,现在我们需要一种穷人的方法来搭建好Azure虚拟机. 思路很简单,因为AI组件的原理其实是传送了script文件和命令上去,那么我们这个虚拟机只要做好了所有的配置,那么我们就可以将它当作深度 ...

  2. IPv6 VS IPv4,谈谈升级 IPv6 的必要性

    11月26日,中办.国办印发了<推进互联网协议第六版(IPv6)规模部署行动计划>,提出国内要在 5~10 年的时间形成下一代互联网自主技术体系和产业生态,建成全球最大规模的 IPv6 商 ...

  3. 【二十二】mysqli事务处理

    事务处理 事务基本原理 如果不开启事务,执行一条sql,马上会持久化数据.可见:默认的mysql对sql语句的执行是自动提交的! 如果开启了事务,就是关闭了自动提交的功能,改成了commit执行自动提 ...

  4. Hibernate框架入门

    导读 本文主要介绍hibernate的入门,主要包括以下内容:hibernate介绍.hibernate环境搭建.hibernate简单测试.测试涉及的api详解. 一.hibernate介绍 JDB ...

  5. HttpClient(一)HttpClient抓取网页基本信息

    一.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包, 并且它支 ...

  6. otter双A同步配置

    otter双A配置 最近做跨国服务器的数据同步,用了阿里的otter开源框架,遇到了不少问题,写一下文档为以后做参考. 第一步: 下载所需的文件 :otter,zookeeper,aria2 otte ...

  7. JSON数据解析及gson.jar包

    从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...

  8. ado 字符串变量

    这次变量主要针对 Mfc 的 Cstring 类型的变量(前面VC 链接Access 数据库 插入变量到表) 思路; 1 把cstring 类型 转为 string 2 string 转 char 数 ...

  9. XML文档读取-DOM4j

    JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J. Dom4j是一个简单.灵活的开放源代码的库.Dom4j是 ...

  10. Java高级开发工程师面试——多线程

    来自:Sanesee 链接:http://www.sanesee.com/article/java-engineer-interview-of-thread 1.进程和线程的区别? 进程是一个具有独立 ...