黑马程序员技术交流社区

标题: 关于求1~100以内素数的问题的个人想法! [打印本页]

作者: darkblue2016    时间: 2016-5-8 12:54
标题: 关于求1~100以内素数的问题的个人想法!
本帖最后由 darkblue2016 于 2016-5-11 23:26 编辑

分析以下需求,并用代码实现:
                (1)打印1-100之间的所有素数及个数
                (2)每行输出5个满足条件的数,之间用空格分隔
                (3)大于1的能被1和其本身整除的数叫素数
                (4)如:2 3 5 7 11

这道题是java基础部分的关于循环语句的提高题,原本是给定答案的,但答案提供的两种方法让人不是特别好理解,
为此本帖打算分享一下个人的一点编程思路,因所学有限,有班门弄斧之处还望谅解.如果有同学还有更好的见解,
大家可以一起交流一下.
/*
首先需要分析一下如何判断一个数是不是素数,分析素数的定义可知大于一且只能被一和它本身整除的数叫素数,
那么最简单的想法就是让这个数与介于1到它本身之间的数做取余运算,借助条件语句判断一下除一和它本身外是
否还有其他可以整除的数,若没有则是素数,否则就不是素数.

第一步:借助第一层for循环获取2~100(因为1不是素数故直接排除)之间的数用于做判断;
第二步:借助第二层for循环获取1到所要作判断的数之间的数;
第三步:在第二层循环中借助if语句进行能否整除的判断;

*/

代码如下:
  1. class Test {
  2.         public static void main(String[] args) {

  3.                 int count1 = 0;           // count1用来统计素数的个数;
  4. // count2用来统计当前所要判断的数能被介于1到其本身之间的数整除的数的个数,注意内部循环结束后count2必须清零;        
  5.                 for (int i = 2;i <= 100 ;i++ ) {    //注意此处变量i是从2开始的;
  6.                         int count2 =0;        
  7.                         for (int j = 1;j <= i ;j++ ) {
  8.                                 if (i % j == 0) {
  9.                                         count2++;                                       
  10.                                 }                                                                                       
  11.                         }
  12. //根据count2的作用,当其值大于2,则说明当前所要判断的数不是素数,所以要用continue终止本次循环,继续下一次循环;
  13.                         if (count2 > 2) {      
  14.                                 continue;
  15.                         }else {
  16.                                 count1++;
  17.                                 System.out.print(i+" ");
  18.                         }
  19.                         if (count1 % 5 == 0) {
  20.                                 System.out.println();
  21.                         }
  22.                 }
  23.                 System.out.println("1-100之间的所有素数的个数为" + count1+"个");
  24.         }
  25. }
复制代码
后续改进代码更简洁一些,累加变量由原来的两个变为了一个,此时更容易让人理解,continue的作用很关键!
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 int count = 0;
  4. /*对外层循环进行了标号,一旦满足if语句的判断条件即可确认当前数为非素数,此时内层循环没有继续下去的必要,所以直接终止本次外层循环,继续下一循环.*/
  5.                 outer:for (int i = 2;i <= 100;i++ ) {
  6.                         for (int j = 2;j < i ;j++ ) {
  7.                                 if (i % j == 0) {
  8.                                         continue outer;
  9.                                 }                                                                                       
  10.                         }
  11.                         count++;         //此处的累加变量是用来统计素数的个数;
  12.                         System.out.print(i + " ");
  13.                         if (count % 5 == 0) {
  14.                                 System.out.println();
  15.                         }
  16.                 }
  17.                 System.out.println("1-100之间的所有素数个数为: " + count);
  18.         }        
  19. }
复制代码




作者: liujian5461267    时间: 2016-5-8 13:11
不错,有点意思
作者: A20160580    时间: 2016-5-10 23:05
可以。。。。
作者: 小无敌0412    时间: 2016-5-11 10:00
j从2开始就好了啊
一旦i % j == 0,就跳出本次循环,之后就不用再除了
你这的count2含义不直观
作者: ybqred    时间: 2016-5-11 21:23
赞!!!!!!!!!!!!
作者: darkblue2016    时间: 2016-5-11 23:30
小无敌0412 发表于 2016-5-11 10:00
j从2开始就好了啊
一旦i % j == 0,就跳出本次循环,之后就不用再除了
你这的count2含义不直观 ...

嗯,确实是,我又改进了一下代码,改进后的代码更简洁一些,那个count2的变量也取消了!
作者: darkblue2016    时间: 2016-5-11 23:31
小无敌0412 发表于 2016-5-11 10:00
j从2开始就好了啊
一旦i % j == 0,就跳出本次循环,之后就不用再除了
你这的count2含义不直观 ...

嗯,确实是,我又改进了一下代码,改进后的代码更简洁一些,那个count2的变量也取消了!
作者: 善良的死神达乐    时间: 2016-5-12 00:17
Good boy! Good job!!!
作者: liusong    时间: 2016-5-15 21:56
第二个方法不错的
作者: cxl1694095035    时间: 2016-5-15 22:04
不错啊继续努力哈
作者: Noodles.    时间: 2016-5-15 23:13
不错!我也要学习啊
作者: 一架飞机CE3    时间: 2016-5-15 23:34
说实话 我数学不好什么是素数我都不知道
作者: darkblue2016    时间: 2016-5-16 22:40
一架飞机CE3 发表于 2016-5-15 23:34
说实话 我数学不好什么是素数我都不知道

其实我刚开始也不知道的,不过题干上给出了素数的定义,自己编程时按照定义来做就行了!
作者: 我有上将潘凤    时间: 2016-5-16 22:58
挺不错的。。。
作者: 我是你岁哥❤环    时间: 2016-5-17 02:16
很好,很棒




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2