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

一、算法分析:

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. php 7.2 一些注意事项.

    <?php $b = array(); each($b); // Deprecated: The each() function is deprecated. This message will ...

  2. sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...

  3. gdb的多线程调试

    info threads 可以查看当前进程有哪些线程 thread ID 可以切换到线程ID bt 查看当前线程堆栈 set scheduler-locking on多线程调试过程中, 线程会来回切换 ...

  4. # openVPN+LDAP AD认证,组权限管理

    # openVPN+LDAP AD认证,组权限管理 原创内容http://www.cnblogs.com/elvi/p/7661178.html # openVPN+LDAP AD认证,组权限管理 # ...

  5. JAVA提高十九:WeakHashMap&EnumMap&LinkedHashMap&LinkedHashSet深入分析

    因为最近工作太忙了,连续的晚上支撑和上班,因此没有精力来写下这篇博客,今天上午正好有一点空,因此来复习一下不太常用的集合体系大家族中的几个类:WeakHashMap&EnumMap&L ...

  6. 驱动调试-根据oops定位错误代码行

    1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2 ...

  7. 实践作业2:黑盒测试实践——编写自动化脚本并拍摄测试过程视频 Day 6

    下午下课之后小组成员一起交流了一下实验过程遇到的一些问题,并汇总了下各个项目完成情况 该实验目前(写博客是时间)基本完成,具体情况如下 (1)分析系统需求 .(done) (2)设计测试用例.(don ...

  8. Springmvc ModelAndView踩过的坑之HttpServletResponse response

    先抛出问题.以下两个方法声明有毛区别: @RequestMapping(value = "/rg") public void rg(@PathVariable Long pageI ...

  9. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  10. tyvj4869 罪犯分组

    看数据范围,果断状压.真是比愤怒的小鸟还智障..... #include<bits/stdc++.h> using namespace std; #define MAXN 500000+1 ...