要求:打印 2 - 100000 当中的素数与非素数。(素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数)

1. 常规方式——对正整数n,如果用2到  之间的所有整数去除,均无法整除,则n为质数:

  // sqrt 法
public static void printPrime1(int num) {
boolean[] isPrimes = new boolean[num + 1];
for (int i = 2; i < isPrimes.length; i++) {
isPrimes[i] = true;
} for (int i = 3; i <= num; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isPrimes[i] = false;
break;
}
}
} System.out.print("质数有: ");
for (int i = 2; i < isPrimes.length; i++) {
if (isPrimes[i]) {
System.out.print(i + " ");
}
}
System.out.println("");
System.out.print("非质数有: ");
for (int i = 2; i < isPrimes.length; i++) {
if (!isPrimes[i]) {
System.out.print(i + " ");
}
}
}

  注意这里用一个布尔类型的数组用于素数的判断与最终结果的打印,避免了使用两个容器去分别存放各自需要打印的两块内容。

 2. 埃氏筛选法

  // 埃氏筛法
public static void printPrime2(int num) {
boolean[] isPrimes = new boolean[num + 1];
for (int i = 2; i < isPrimes.length; i++) {
isPrimes[i] = true;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (isPrimes[i] == true) {
for (int j = 2; i * j <= num; j++) {
isPrimes[i * j] = false;
}
}
} System.out.print("质数有: ");
for (int i = 2; i < isPrimes.length; i++) {
if (isPrimes[i]) {
System.out.print(i + " ");
}
}
System.out.println("");
System.out.print("非质数有: ");
for (int i = 2; i < isPrimes.length; i++) {
if (!isPrimes[i]) {
System.out.print(i + " ");
}
}
}

  最后提供一个main方法,完成对两个方法的调用与性能比较:

  public static void main(String[] args) {
long timePoint1 = System.currentTimeMillis();
printPrime1(100000);
long timePoint2 = System.currentTimeMillis();
System.out.println();
printPrime2(100000);
long timePoint3 = System.currentTimeMillis(); System.out.println();
System.out.println("sqrt法耗时: " + String.valueOf(timePoint2 - timePoint1)); // 390 ms
System.out.println("埃氏筛法耗时: " + String.valueOf(timePoint3 - timePoint2)); // 297 ms
}

Java打印素数(质数)的更多相关文章

  1. Java循环和数组练习题:打印素数升级版

    前两天一个小伙伴问了我一个数组的练习题,我一看思路很清晰,就是打印素数加了个数组.没想到写的时候啪啪打脸,终究还是没逃过眼高手低.本来不打算发出来了,因为发出来愈发显得我很菜,最后还是打算分享出来,一 ...

  2. Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...

  3. 关于这两天研究Java打印pdf方法的记录

    这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...

  4. java打印正金字塔,倒金字塔和“水影”金字塔

    java打印正金字塔,倒金字塔和"水影"金字塔 --------原创文章,若要转载,请注明出处   小小少年 闲来无事,想起自己初学java的时候做的经典的无非就是打印出一些有意思 ...

  5. Java打印

    Java打印 import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Gra ...

  6. Java求素数时出现错误

    Java求素数时出现错误 1.具体错误如下 No enclosing instance of type Prime is accessible. Must qualify the allocation ...

  7. Java 打印程序设计实例

    3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...

  8. Java打印整数的二进制表示(代码与解析)

    Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...

  9. Java打印金字塔问题

    Java打印金字塔问题 public class 金字塔问题 { // //普通金字塔 // public static void main(String[] args) { // //先打印4层 / ...

随机推荐

  1. JMeter测试clickhouse

    使用JMeter对clickhouse连接测试 1.测试计划 jmeter通过JDBC连接数据库需要先引入对应的驱动包,驱动包的版本要与服务器数据库版本一致,我用的驱动版本是:clickhouse-j ...

  2. 【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库

    清理归档日志 ogg使用需要开启归档日志,归档日志会随着时间的推移逐渐增多,占满空间,导致应用无法正常运行. 如果归档日志满了会报错 ORA-00257:archiver error解决办法 检查fl ...

  3. Computer Vision_33_SIFT:An Improved RANSAC based on the Scale Variation Homogeneity——2016

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  4. Android笔记(十) Android中的布局——表格布局

    TableLayout运行我们使用表格的方式来排列控件,它的本质依然是线性布局.表格布局采用行.列的形式来管理控件,TableLayout并不需要明确的声明包含多少行多少列,而是通过添加TableRo ...

  5. Linux之python3编译安装

    一,前言 centos7默认是装有python的,咱们先看一下 [root@glh ~ 20:18:03]#python Python 2.7.5 (default, Jul 13 2018, 13: ...

  6. [ansible-playbook]离线安装ansible 2.3

    痛点: 测试环境无法连上外网升级ansible 预计阅读时间:5分钟 参考文档 http://docs.ansible.com/ansible/latest/intro_installation.ht ...

  7. GPT分区格式

    1. GPT定义 全局唯一标识分区表(GUID partition table, 缩写:GPT)是一个实体硬盘的分区表的结构布局的标准.它是可扩展固件接口(UEFI)标准的一部分,被用于替代BIOS系 ...

  8. 无法访问此网站 ERR_CONTENT_DECODING_FAILED

    这个错误挺少见的. 百度了下: 1,说是文件编码格式不正确: 2,说是Nginx的压缩和tomcat的压缩冲突了,关闭gzip压缩: 3,……………… 不管是哪一种情况,都是编码问题,所以逐一排查,根 ...

  9. 基于GitLab CI搭建Golang自动构建环境

    基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 开发者本地环境需要将环境变量文件改 ...

  10. IDEA实用教程(五)——配置IDEA的JVM内存值

    ---恢复内容开始--- 四. 配置IDEA的JVM内存值 IDEA默认配置的JVM内存值比较低,如果硬件配置较高,可以修改该设置. 该设置需要在工程界面进行. 该操作仅建议内存8G以上,64位操作系 ...