4.1优化算法-----输出素数

最简代码请直接移步文末

原代码:https://www.cnblogs.com/Tianhaoblog/p/15077840.html

对应优化如下

优化一:在遍历内循环时,只要满足一个“非1非自身”的数可以整除,直接break跳出循环,因为此时“i”已经不是质数。对“非质数”数据优化明显;

优化二:在遍历内循环时,判断“i”是否为质数,不用遍历2-->i,只要判断2-->根号i,若不能被整除,就说明“i”是质数。对所有数据均有优化,但因优化一存在,非质数已经跳出循环,所以此条优化更有助于“质数”的数据优化;



假设i=100,

判断是否在两数相乘等于第三个数

a × b = c

因为不包含1,所以 a 、b 两个数最小均为 2 ,且最大均为c / 2。

a = 2 时,b = c / 2,满足条件a × b = c;

a = c / 2 时,b = 2,满足条件a × b = c;

a 从 2 开始不断递增,到 c / 2截止(2,3,4,5,6,7————c / 2)

此时 b 从 c / 2 开始不断减小,到 2 截止(c / 2————7,6,5,4,3,2)

此时 a = 2 和 b = 2 时相当于重复遍历,找到 a 和 b 的临界点,停止遍历,这样就不会重复了,临界点就是 a = b 的点,如上述例子中的10,当 a = b 时,恰好 a 为根号c

代码如下:

public class PrimeNumber {
public static void main(String[] args){
long start = System.currentTimeMillis();//开始时间
int isLine = 10;
boolean isFlag = true;
for (int i = 2; i <100000; i++) {//输出100000以内的素数
for (int j = 2; j <= Math.sqrt(i); j++) { //优化二:只取根号i ---对本身质数的数据优化!!!!
if(i % j == 0){
isFlag = false;
break;//优化一:满足一个整除就跳出循环---对本身为非质数的数据优化!!!!!
}
}
if(isFlag){
System.out.print(i + " ");
isLine--;
if(isLine == 0){
System.out.println();
isLine = 10;
}
}else{
isFlag = true;
}
}
long end = System.currentTimeMillis();//结束时间
System.out.println("程序运行时间:" + (end-start));//输出程序运行时间
}
}

//输出100000以内的素数
2 3 5 7 11 13 17 19 23 29 //每行10个数据
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
......//省略。。。
99761 99767 99787 99793 99809 99817 99823 99829 99833 99839
99859 99871 99877 99881 99901 99907 99923 99929 99961 99971
99989 99991
程序运行时间:136

最简版素数代码:

public class PrimeNumber {
public static void main(String[] args){
label:for (int i = 2; i <100000; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
continue label;//存在可以整除的数,跳出当前循环,回到外层循环继续执行。
}
}
System.out.println(i);//因非质数已经通过continue跳出本层循环,凡是可以运行到此位置的,均为质数
}
}
}

算法优化---素数(质数)(Java版)的更多相关文章

  1. 算法之求质数(Java语言)

    质数(Prime number) 又称素数,指在的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数). 算法原理 验证一个数字 n 是否为素数的一种简单但 ...

  2. RAS算法简单示例(Java版)

    RSA算法——由三位发明者Ronald Rivest.Adi Shamir 和 Leonard Adleman 姓氏的首字母拼在一起组成. RSA算法属于“公开密钥加密技术”,其加密和解密的秘钥不同. ...

  3. 基于雪花算法生成分布式ID(Java版)

    SnowFlake算法原理介绍 在分布式系统中会将一个业务的系统部署到多台服务器上,用户随机访问其中一台,而之所以引入分布式系统就是为了让整个系统能够承载更大的访问量.诸如订单号这些我们需要它是全局唯 ...

  4. 算法练习1---桶排序java版

    今天复习了桶排序. 例如现在有满分为10分的试卷,学生得分分别为2,8,5,3,5,7,现在要给这些分数按照从大到小输出,使用桶排序的思想:有11个桶,每个桶有一个编号,编号从0-10,每出现一个分数 ...

  5. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  6. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  7. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  8. 剑指Offer——回溯算法解迷宫问题(java版)

    剑指Offer--回溯算法解迷宫问题(java版)   以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路.   下面我们来详细讲一 ...

  9. 常见排序算法总结(java版)

    一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...

随机推荐

  1. WordPress安装篇(1):使用PHPStudy安装WordPress

    我是"小白",既不会编程也不懂CSS能自己搭建网站吗?可以的!只要你会用鼠标,懂打字就能搭建出属于你自己的网站.要怎么样才能做到昵?让我们一起来看看如何实现的吧.在Windows环 ...

  2. 【NX二次开发】点到矢量或直线的垂点

    已知p1.p2.v1求p0 求解: 通过P1点和P2点,先求出v2: 使用 UF_VEC3_dot(),v1点乘v2得到P0与P2之间的距离: 使用UF_VEC3_unitize()将v1单位化: p ...

  3. 从1+1=2来理解Java字节码从1+1=2来理解Java字节码

    编译"1+1"代码 首先我们需要写个简单的小程序,1+1的程序,学习就要从最简单的1+1开始,代码如下: 写好java类文件后,首先执行命令javac TestJava.java ...

  4. docker 自定义部署Springboot——依赖与代码分离部署

    第一步:执行mvn package 命令打出jar包,然后解压jar包,把lib放到服务器合适的目录下面 第二步:打出不带jar包的SpringBoot工程 首先配置pom.xml文件 <bui ...

  5. noip模拟7[匹配·回家·寿司]

    这次考试状态好像还是没有回来,只拿了55pts,还全是第一题的功劳,就是一个小KMP,然后还让我给打错了 就很难受,while打成了if,然后wa掉45分考完立马拿回来了,悔死了,害 第二题爆零了,为 ...

  6. js-动态表单校验-吐血总结最近遇到的变态表单校验2---element+原生

    上一部分总结了基础常用的js表单校验,包括原生以及框架,下面来总结这一个月涉及到的动态校验: 动态表单校验大致分为三种情况: 1. 首先是固定校验规则,但是表单组件是动态生成的,例如:在表单或者表格里 ...

  7. springboot+kurento+coturn+contos的视频通讯服务搭建

    springboot+kurento+coturn+contos的视频通讯服务搭建 服务器CentOS Linux release 7.9.2009 (Core) 本案例成功于20210628 1.默 ...

  8. 最多能创建多少个 TCP 连接?

    我是一个 Linux 服务器上的进程,名叫小进. 老是有人说我最多只能创建 65535 个 TCP 连接. 我不信这个邪,今天我要亲自去实践一下. 我走到操作系统老大的跟前,说: "老操,我 ...

  9. .net core mysql entity映射时字符串被截断

    参考地址:https://stackoverflow.com/questions/40833262/net-core-entity-framework-mysql-string-fields-stor ...

  10. ubuntu 18.4LTS 安装12.1.6赛门铁克防病毒系统

    创建/tools/ 文件夹,并将需要的软件包上传到该目录下 # mkdir -p /tools/ && cd /tools/ # tar -xzvf chang.tar.gz # cd ...