A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

darkblue2016

中级黑马

  • 黑马币:40

  • 帖子:85

  • 精华:0

本帖最后由 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. }
复制代码



14 个回复

倒序浏览
不错,有点意思
回复 使用道具 举报
可以。。。。
回复 使用道具 举报
j从2开始就好了啊
一旦i % j == 0,就跳出本次循环,之后就不用再除了
你这的count2含义不直观
回复 使用道具 举报
赞!!!!!!!!!!!!
回复 使用道具 举报
小无敌0412 发表于 2016-5-11 10:00
j从2开始就好了啊
一旦i % j == 0,就跳出本次循环,之后就不用再除了
你这的count2含义不直观 ...

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

嗯,确实是,我又改进了一下代码,改进后的代码更简洁一些,那个count2的变量也取消了!
回复 使用道具 举报
Good boy! Good job!!!
回复 使用道具 举报
第二个方法不错的
回复 使用道具 举报
不错啊继续努力哈
回复 使用道具 举报
不错!我也要学习啊
回复 使用道具 举报
说实话 我数学不好什么是素数我都不知道
回复 使用道具 举报
一架飞机CE3 发表于 2016-5-15 23:34
说实话 我数学不好什么是素数我都不知道

其实我刚开始也不知道的,不过题干上给出了素数的定义,自己编程时按照定义来做就行了!
回复 使用道具 举报
挺不错的。。。
回复 使用道具 举报
很好,很棒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马