黑马程序员技术交流社区

标题: 素数的查找(2个for循环解决) [打印本页]

作者: lanbuohan    时间: 2013-7-8 02:01
标题: 素数的查找(2个for循环解决)
本帖最后由 杨兴庭 于 2013-7-8 12:27 编辑

刚查有一个问题自己没有弄明白,错把奇数当做的素数,感谢帮助我指出问题的人,我看的一下大家在便利0~~100这个
整数的所有素数时,方法都有一些麻烦,我去查找的一下,这是别人写得一个代码,大家看一下,个人觉的很简洁:
for (int i = 2; i <100; i++)
{            
      for (int j = 2; j <= i; j++)      
     {           
            if (i == j)  
            {//      
                 System.out.println(i);      
            }   
             if (i % j == 0)  
            {           
                  break;   
            }      
    }     
}

作者: 草貌路飞    时间: 2013-7-8 02:29
这个不简洁,内层循环不用全部判断的,我知道的是只用判断一半就行了,好像还有更少判断的。效果就是:不是素数的就不用说了,怎么写都一样。是素数可以减少判断的次数。
作者: chensc    时间: 2013-7-8 06:09
学习学习!
作者: lanbuohan    时间: 2013-7-8 09:43
草貌路飞 发表于 2013-7-8 02:29
这个不简洁,内层循环不用全部判断的,我知道的是只用判断一半就行了,好像还有更少判断的。效果就是:不是 ...

那大家讨论一下怎样让这个循环更加简洁
作者: HM张博文    时间: 2013-7-8 22:32
  1. public static boolean isPrime(int i)
  2.     {

  3.             
  4.                          for (int j = 2; j <=Math.sqrt(i); j++) //i=2是素数,循环不执行因为如果一个数不是质数那么它是两个数的乘积。
  5.                                                                 //这两个数一定有一个小于等于sqrt(),因此只要找较小的银子就可以了
  6.               {
  7.                 if (i % j == 0)
  8.                     return false;   //能整除说明不是素数,返回false
  9.             }
  10.         return true;
  11.     }

  12. }
复制代码
素数问题啊,我给你来个更简洁的方法,定义一个方法吧

作者: lanbuohan    时间: 2013-7-9 01:16
  1. public staic boolean isPrime(int i)
  2. {
  3. //你输入一个你要判断的数字I;

  4. //素数除了1和此整数自身外,无法被其他自然数整除的数

  5. //那有可能被整出的数一定是在2~~I之间。如i=16;那么能整除的数
  6. //就有2,4,8不可能超出16,这样是不就可以减少程序判断吗。
  7.         for(int j=2; j<i;j++)
  8.                {
  9.                  //这个还可以对i = 2进行判断
  10.                  if(i%j == 0)
  11.                   return false;
  12.                  }

  13.       return true;

  14. }
复制代码





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