要求:打印 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. Python 虚拟空间的使用

    使用虚拟环境, 可以将当前项目所使用的依赖与电脑中其他 Python 项目的依赖区分开, 避免依赖版本不匹配带来的问题, 同时也可以防止项目依赖被不当更新. mkdir myproject cd my ...

  2. IDEA类的旁边有个对勾

    说明该类添加到IDEA的书签栏去了,在IDEA左侧下方有个Favorites选项,在这里的BookMarks中可以看到这个类. 取消方法: 选中这个类,按F11即可取消

  3. sudo 权限的管理

    一.sudo执行命令的流程将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户.具体工作过程如下:当用户执行sudo时,系统 ...

  4. 提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件

    提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件 11月5日,在『WAVE Summit+』2019 深度学习开发者秋季峰会上,百度对外发布基于 ERNIE 的语义理解 ...

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

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

  6. IntentService使用

    说实话,对于这个类在我实际工作中并没有用到过,通常也只是用了它的父类Service,通过官方文档可以看出类的层次结构: 而在今年的一次面试当中,有个面试官提起了它,所以虽说目前还没有真实在项目中用它, ...

  7. ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】

    2080 : A+B or A-B(点击左侧标题进入zznu原题页面) 时间限制:1 Sec 内存限制:0 MiB提交:8 答案正确:3 提交 状态 讨论区 题目描述 Give you three s ...

  8. UML之九种图

    UML说是九种图吧!其实是众说纷纭,不管有几种图,我们只要能够很好的运用这几张图就好,主要有用例图.类图.对象图.状态图.活动图.序列图.协作图.构件图和部署图,至于包图是否属于这九种图,我也理不清楚 ...

  9. python多线程实现ping多个ip

    #!/usr/bin/env python # -*- coding:utf-8 -*- import subprocess import logging import datetime import ...

  10. nginx location中root指令和alias指令的区别

    nginx location中root指令和alias指令 功能:将url映射为文件路径,以返回静态文件内容 差别:root会将完整的url映射进文件路径中 alias只会将location后的url ...