算法优化---素数(质数)(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 ...
随机推荐
- PTA题目集7-9总结
PTA题目集7-9总结 一.前言 题目集七:该题集为轮到图形卡片排序游戏题,主要考查的知识点有类的继承,ArrayList泛型的使用,Compabale接口的运用,多态的使用方法以及接口的应用,难度较 ...
- java面试技巧及层次。
不断的积累,从打算找工作之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要注意什么,这里给人的 ...
- 【题解】Grape luogu1156改 dp
考试时被数据坑了 题目 原题 传送门 题目描述: 众所周知的是oyyf 沉迷葡萄,今天的oyyf为了葡萄溜到了He 大佬家的葡萄园偷葡萄,可惜的是还没偷到葡萄He 大佬就来葡萄园了,吓的oyyf 直接 ...
- DOS命令行(10)——reg/regini-注册表编辑命令行工具
注册表的介绍 注册表(Registry,台湾.港澳译作登錄檔)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息. 1. 数据结构 注册表由键(key,或称 ...
- js关于数组的操作(合并数组、添加数组、循环等)
1. concat() 方法 concat() 方法用于连接两个或多个数组 var arr = new Array(3) arr[0] = "George" arr[1] = &q ...
- 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题
一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...
- <题解>世界树
世界树<题解> 首先我们拿到这个题之后,能想到的一定是虚树,如果想不到的话,还是重新学一遍去吧 所以我们应该怎么做呢 虚树的板子不需要我再讲一遍了吧 所以对于这个题来说,怎么根据虚树上的节 ...
- mysql主节点down机后如何恢复操作
1 停机维护 (1) 先停止上层应用 (2) 检查backup和slave的中继日志是否已经完成了回放及gtid_executed保持一致 mysql> show slave status\G; ...
- 第2章:Kubernetes核心概念
Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效. ...
- FastDFS文件系统迁移和数据恢复
迁移步骤 打包旧服务器文件的所有文件 定位到旧服务器的tracker和Storage目录,将整个文件夹打包 tar -zcf fdfs-storage-data.tar.gz /fastdfs/sto ...