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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© linliner 中级黑马   /  2015-3-23 21:21  /  874 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*需求:求出100以内的素。
思路:        1,首先确定2是素数;
            2,从3开始到100的每个数n分别对2到前一个素数取模,若为0,都不为0,就是素数;
            3,把这些数存到数组中;                4,遍历数组,每5个一行进行打印。
*/       
        存在的问题:
                        1,每个奇数都会被打印
                        2,许多数不止被打印一次
                怎么样才能每个数只打印一次
                怎么样才能使非素数不被打印--内循环循环一遍才确定是否打印
                */
                for ( int x =3 ; x <=100 ; x++ )
                {
                        for ( int y = 2 ; y < x ; y++ )
                        {
                                if (x%y==0)
                                        break;
                                else
                                        System.out.print(x+",");
                        }
                }

问题怎么解决呢?
还是思路就有问题了?

4 个回复

倒序浏览
在else中加个break
回复 使用道具 举报
取模的思路对,但是break不对,你应该用一个计数器,加下x%y==0的次数,然后再判断计数器为几,如果计数器为0,则为素数,输出他,如果大于 0,则不是素数
回复 使用道具 举报
举个例子你就知道为什么错了:比如现在要对10这个数进行判断,首先10%2==0,已经可以得出10不是素数。可是程序此时跳出if,还会继续计算10%3!=0,于是打印10。你要知道,一个数即使不是素数,但对2到(自身-1)的取模过程中,总会有N个结果不是0的,这时就会打印N次这个数。正如楼上所说,必须加个计数器,设定只有N为0时,才会打印这个数。
回复 使用道具 举报
已经做出来了,只是是定义了一个函数,在if条件里调用函数做的
  1. class  test318_003
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for (int x = 2 ;x < 101 ; x++ )
  6.                 {
  7.                         if (x==2)
  8.                         {
  9.                                 System.out.print(2+",");
  10.                         }
  11.                         else
  12.                         {       
  13.                                 if (isPrime(x)==true)
  14.                                 {
  15.                                         System.out.print(x+",");
  16.                                 }
  17.                         }
  18.                 }
  19.         }
  20.         public static boolean isPrime( int x )
  21.         {
  22.                 for ( int i = 2 ; i < x ; i++ )
  23.                         if (x % i == 0)
  24.                                 return false ;
  25.                         return true ;
  26.         }
  27. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马