*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法改写5-15

  • 题目
    • 题目描述
    • 破题
    • 程序清单5-15(非本题代码)
  • 本题代码
    • 运行示例

题目

题目描述

*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法是检验小于等于根n的素数是否有一个能被n整除。如果都不能则n就是素数。用这种方法改写程序清单5-15以显示前50个素数。需要使用一个数组存储这些素数,之后使用这些素数来检测它们是否可能为n的因子

破题

本题关键点已经圈画

程序清单5-15(非本题代码)

public class qingdan {public static void main(String[] args) {// Number of primes to display:输出50个素数final int NUMBER_OF_PRIMES = 50;// Display 10 per line:一行10个数字final int NUMBER_OF_PER_LINE = 10;// Count the number of prime numbers:计数变量int count = 0;// A number to be tested for primeness:测试用变量int number = 2;System.out.println("The first 50 prime numbers are \n");// Repeatedly find prime numberswhile (count < NUMBER_OF_PRIMES) {// Assume the number is primeboolean isPrime = true; // Is the current number prime?// Test whether number is primefor(int divisor = 2; divisor <= number / 2;divisor++){if (number % divisor == 0){  // If true, number is not primeisPrime =false;break;}}// Display the prime number and increase the countif( isPrime ){count++;    // Increase the countif(count % NUMBER_OF_PER_LINE == 0){// Display the number and advance to the new lineSystem.out.println(number);}elseSystem.out.print(number + " ");}// Check if the next number is primenumber++;}}
}

本题代码

public class Test7_6 {public static void main(String[] args) {// Number of primes to display:输出50个素数final int NUMBER_OF_PRIMES = 50;// Display 10 per line:一行10个数字final int NUMBER_OF_PER_LINE = 10;// Count the number of prime numbers:计数变量int count = 0;// A number to be tested for primeness:测试用变量int number = 2;// 设置一个接收素数的数组int[] primeList = new int[50];// Repeatedly find prime numberswhile (count < NUMBER_OF_PRIMES) {// Assume the number is primeboolean isPrime = true; // Is the current number prime?// Test whether number is primefor(int divisor = 2; divisor <= number / 2;divisor++){if (number % divisor == 0){  // If true, number is not primeisPrime = false;break;}}// Display the prime number and increase the countif( isPrime ){primeList[count] = number;count++;    // Increase the countif(count % NUMBER_OF_PER_LINE == 0){// Display the number and advance to the new lineSystem.out.println(number);}elseSystem.out.print(number + " ");}// Check if the next number is primenumber++;}// 使用新方法判断primeList[]中的素数(假设为n),有没有比根n小的素数能被n整除// 只要有1个能被整除即可退出并输出可能,如果全部遍历完都不是的话,则输出不可能int length = primeList.length;double root = 0;for (int i = length - 1 ; i >= 0 ; i--){// 求根下nroot = Math.sqrt(primeList[i]);// 遍历<根下n的素数,看是否能被n整除,如果是则输出结果并强制退出for (int y = 0 ; primeList[y] < root ; y++){if (primeList[i] % primeList[y] == 0){System.out.println("可能");System.exit(0);}}}System.out.println("不可能");}
}

运行示例

2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
不可能

Java黑皮书课后题第7章:*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法是检验小于等于根n的素数是否有n整相关推荐

  1. Java黑皮书课后题第5章:5.2(重复加法)程序清单5-4产生了5个随机减法问题。改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数。显示正确答案的个数和完成测试的时间

    5.2(重复加法)程序清单5-4产生了5个随机减法问题.改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数.显示正确答案的个数和完成测试的时间 题目 题目概述 程序清单5-4 破题 ...

  2. Java黑皮书课后题第7章:7.16(执行时间)编写程序,随机产生一个包含100 000个整数的数组和一个关键字。估算调用程序清单7-6中的linearSearch方法的执行时间

    7.16(执行时间)编写程序,随机产生一个包含100 000个整数的数组和一个关键字.估算调用程序清单7-6中的linearSearch方法的执行时间 题目 题目描述 程序清单7-6的linearSe ...

  3. Java黑皮书课后题第5章:**5.35(加法)编写程序,计算下面的和:1/(1+根2) + 1/(根2+根3) + 1/(根3+根4)+……1/(根624+根625)

    @[TOC](5.35(加法)编写程序,计算下面的和:1/(1+根2) + 1/(根2+根3) + 1/(根3+根4)+--1/(根624+根625)) 题目 题目概述 5.35(加法)编写程序,计算 ...

  4. Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间

    *2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序.修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间 题目 题目描述 运行示例 程序清单2-7(非本题代码) ...

  5. Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)

    Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...

  6. Java黑皮书课后题第9章:*9.11(代数:2*2的线性方程)为一个2*2的线性方程设计一个名为LinearEquation的类

    Java黑皮书课后题第9章:*9.11(代数:2*2的线性方程)为一个2*2的线性方程设计一个名为LinearEquation的类 题目 破题 代码 Test10 Test11_LinearEquat ...

  7. Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

    Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类) 题目 缺陷 UML图 代码 Test02_MyDate.java:用于参考的My ...

  8. Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的

    Java黑皮书课后题第10章:**10.25(新的字符串split方法) 题目 代码 运行实例 题目 代码 public class Test25 {public static String[] sp ...

  9. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  10. Java黑皮书课后题第10章:*10.13(几何:MyRectangle2D类)定义MyRectangle2D类

    Java黑皮书课后题第10章:10.3 题目 程序 代码 Test13.java Test13_MyRectangle2D.java 运行 UML 题目 程序 Test13.java:测试程序 Tes ...

最新文章

  1. 那位13岁就当上老板的开发者是如何炼成的?
  2. 论文中键入行内公式导致行间距变大的解决方案
  3. 如何正确处理Android6.0+的运行时权限申请
  4. java异常及日志注意事项
  5. 理解 e.clientX,e.clientY e.pageX e.pageY e.offsetX e.offsetY
  6. C# Winform中慎用Application.DoEvents
  7. 解决Pytohn安装第三方库出现read timed out 问题
  8. Java-进阶:Java-File--IO—2
  9. 二、源代码=程序集及程序集概念介绍
  10. IE8/9的几个前端bug解决方案
  11. Hdoj 1064 Financial Management
  12. highcharts:根据Y的数值范围,动态改变图形的填充颜色
  13. PayPal开发文档整理(2)- 开发者文档介绍
  14. 最易难学习的编程语言榜单出炉,C++最难学?
  15. ios 简单实现半圆形仪表盘 (进度条)
  16. 2019第八届“中国软件杯”大学生软件设计大赛赛题有哪些?
  17. 安装DevExpress后如何在工具箱显示Dev控件
  18. Android stdio报错:“xxx keeps stopping“解决方案
  19. 开关电源补偿环路设计(2):实践部分-例题
  20. 居中小圆点html,圆点怎么打

热门文章

  1. P1060 开心的金明(01背包)
  2. 昨天又写到个结构体排序,用多种cmp
  3. 【客户故事】借助钉钉宜搭,奶茶店也开始用黑科技管理门店了
  4. AICompiler动态shape编译框架案例和效果数据
  5. 错误码如何设计才合理?
  6. 揭秘 SIGCOMM 20‘ 论文:阿里云网络洛神 VTrace 系统
  7. Linux纯干货知识总结|面试专用
  8. Galgame研发日志:独立游戏制作前应当进行的第一步
  9. SQL基础【五、Where】
  10. 洛谷P1006 传纸条(多维DP)