要求:打印 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. lucene初探

    http://www.cnblogs.com/xing901022/p/3933675.html

  2. RestFramework之注册器、响应器与分页器

    一.注册器的说明与使用 在我们编写url时经常会因请求方式不同,而重复编写某条url,而rest_framework中的注册器帮我节省了很多代码 下面介绍一下如何使用 # 利用注册器来实现路由分发 f ...

  3. 定制centos6.5自动安装ISO光盘

    一 ISO定制项清单 安装系统为centos6.5 (base server),安装方式为全新安装 使用ext4分区格式 安装前可以交互输入root密码,主机名,swap分区大小,之后安装过程自动化 ...

  4. 阿里P7架构师是如何解决跨域问题的!你有遇到吗?

    现在越来越多的项目就算是一个管理后端也偏向于使用前后端分离的部署方式去做,为了顺应时代的潮流,一前后端分离就产生了跨域问题,所以许多同学把跨域和前后端分离项目联系在了一起,其实跨域产生的原因并不是前后 ...

  5. Socket实现client和server端通信(Java)(转)

    转自: https://blog.csdn.net/yayun0516/article/details/50819147 https://www.jianshu.com/p/2d4f223f1462 ...

  6. 【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?

    大致题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,    其左子树中所有结点的键值小于该结点的键值:    其右子树中所有结点的键值大于等于该结点的键值:    其左右子树 ...

  7. 《ABCD组》第三次作业:团队项目的原型设计

    <ABCD组>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https:// ...

  8. 七、Linq To XML:XElement、XDocument

    一.概述 LINQ to XMLLINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework.NET Framework 编程语言中处理 XM ...

  9. kafka读书笔记《kafka并不难学》

    ======第一章 1 在高并发场景,如大量插入.更新数据库会导致锁表,导致连接数过多的异常,此时需要消息队列来缓冲一下.消息队列通过异步处理请求来缓解压力 2 消息队列采用异步通信机制消息队列拥有先 ...

  10. DOM设置css样式

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...