算法优化---素数(质数)(Java版)
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版)的更多相关文章
- 算法之求质数(Java语言)
质数(Prime number) 又称素数,指在的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数). 算法原理 验证一个数字 n 是否为素数的一种简单但 ...
- RAS算法简单示例(Java版)
RSA算法——由三位发明者Ronald Rivest.Adi Shamir 和 Leonard Adleman 姓氏的首字母拼在一起组成. RSA算法属于“公开密钥加密技术”,其加密和解密的秘钥不同. ...
- 基于雪花算法生成分布式ID(Java版)
SnowFlake算法原理介绍 在分布式系统中会将一个业务的系统部署到多台服务器上,用户随机访问其中一台,而之所以引入分布式系统就是为了让整个系统能够承载更大的访问量.诸如订单号这些我们需要它是全局唯 ...
- 算法练习1---桶排序java版
今天复习了桶排序. 例如现在有满分为10分的试卷,学生得分分别为2,8,5,3,5,7,现在要给这些分数按照从大到小输出,使用桶排序的思想:有11个桶,每个桶有一个编号,编号从0-10,每出现一个分数 ...
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 《算法导论》第二章demo代码实现(Java版)
<算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- 常见排序算法总结(java版)
一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...
随机推荐
- 盘点用jQuery框架实现“for循环”的四种方式!
摘要:分享在jQuery高级开发中对元素标签体的遍历常用的几种方法. 本文分享自华为云社区<盘点用jQuery框架实现"for循环"的四种方式!>,原文作者:灰小猿 . ...
- 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控
文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...
- Android EditText输入框实现下拉且保存最近5个历史记录
文章结构: 一.需求阐述 技术部同事提出想要在APP上保存最近输入成功的5个密钥信息,同时支持可以下拉进行选择. 这也是为了方便客户在现在多次输入信息,帮助其快速进行输入. 二.实现思路: 目前想要实 ...
- redis 客户端实现读写分离实现
背景 (1) redis单机的读写性能轻松上大几万,不过线上环境不会只部署光秃秃的一个节点,还是会配合 sentinel 再部署一个 slave作为高可用节点的: 但是standby的slave节点是 ...
- IDEA打开文件时,关闭SonarLint自动扫描
操作步骤 1 打开 Preferences mac快捷键:command+, 2 搜索 SonarLint,取消勾选Automatically trigger analysis,保存设置
- 27、路由 route
优先于网卡中的配置,但是重启或重启网卡失效,最好加入到开机自启动服务中/etc/rc.local文件中: 27.1.添加网络路由: 目的网络.目的网络掩码,网关.网卡: 网络寻址以路由表中的路由优先: ...
- 12、Linux磁盘设备基础知识(1)
GB TB PB EP ZB YB BB:
- 小程序之app.json not found
起因 最近在部署几款小程序时,发现ext.json文件会被忽略不上传,查了一下资料发现原来是需要升级开发者工具了. 没想到升级以后,再开发项目时,就报错 app.json not found 解决方法 ...
- Jquery Validate动态添加和删除校验规则
以下面文本框为例, <input type="text"name="username" id="username"/> 我们要让 ...
- PE文件头格式解析
前言: 昨天写了一题de1ctf的题,发现要脱壳,手脱之后发现要iat修复,我就发现自己在这块知识缺失了,win逆向,好像一直都是打ctf,然后用逆向方法论去肝的 其他方面倒是没有很深入学习,但实际上 ...