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. Pipeline模式与Factory+Provider模式的应用

    前言 我正在写FastGithub这个小麻雀项目,里面主要涉及了Pipeline模式和Factory+Provider模式,这两种设计模式,让这个项目在"ip扫描"和"i ...

  2. 6.7考试总结(NOIP模拟5)

    前言 昨天说好不考试来着,昨晚就晚睡颓了一会,今天遭报应了,也没好好考,考得挺烂的就不多说了. T1 string 解题思路 比赛上第一想法就是打一发sort,直接暴力,然后完美TLE40pts,这一 ...

  3. 备份schema并排除大表到ASM磁盘上

    1.查出占用空间比较大的表 select owner,segment_name,segment_type,bytes/1024/1024 mb from dab_segment where owner ...

  4. docker2-镜像原理及创建新的镜像

    1,镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 在docker中所有应用 ...

  5. Etcd中linearizable read实现

    linearizable 有点疑惑,不确定是现在浏览的版本没开发完全,还是没有按照论文的linearizable来实现. 按照论文所说,在客户端请求的时候,实际上是一个强一致的 exactly onc ...

  6. .Net Core with 微服务 - Elastic APM

    上一次我们介绍了Seq日志聚合组件.这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件.APM 监控围绕对应用.服务.容器的健康监控,对接口的调用链.性能进行监控.在我们实施微服务 ...

  7. 没有指定非静态方法,Unity与Android通信错误

    报错信息: AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='InstallApk' ...

  8. 50、django工程(ajax)

    50.1.ajax介绍: 1.ajax是在不跳转当前url地址的情况偷偷的往后台发送数据做增删改数据的操作,如果成功返回结果刷新当前页面,失败则提醒, 使用 id 或 name 属性. 2.模态对话框 ...

  9. CRM系统如何帮助企业管理多条业务线的?

    在如今的市场环境中,许多企业为了提高销售效率,增加业绩收入,都会选择使用CRM客户关系管理系统来帮助进行对客户和销售的管理.CRM系统能够帮助企业在不同的产品线上同时开展营销活动.各个销售团队能够独立 ...

  10. Netty Recycler的源码分析

    Recycler分析 调用来源:PooledByteBuf.java 涉及的知识: AtomicInteger WeakReference ThreadLocal 在DefaultHandle 中调用 ...