日期:2014-05-20  浏览次数:20864 次

菜鸟困惑:Java求质数算法
今天遇到的一个求素数的方法,有一段一直看不明白:
class PrimeNumber{
  int count = 0;
  int number = 2;
  public void isPrime(){
  while(count<50){
  boolean isPrime = true;
  for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
  }
  }
  if(isPrime){
  count++;
  System.out.print(number + ",");
  }
  number++;
  }
  }
其中for loop的那一段,既然当number % divisor == 0的时候就是false,即退出了for loop,那么一开始number=2的时候number % divisor == 0也是成立的,那么isPrime也就为false了,但为啥最后输出结果里面还有2呢?
本人刚出道的菜鸟,还望有人指点迷津,谢过了~~

------解决方案--------------------
因为number=2的时候,for处diviisor<=number/2条件不成立,没有走进for循环,直接输出了2。
------解决方案--------------------
number=2的时候没有进for循环,isPrime还是true
------解决方案--------------------
看了上面的解释,LZ明白了吗?看看代码: for(int divisor = 2; divisor <= number/2; divisor++){
当number=2时,对于上述条件divisor<=number/2即是2<=1,很明显这是不成立的,所以之后就没有进入循环啊,所以现在isPrime还是为true,所以2也被输出来了。

探讨
今天遇到的一个求素数的方法,有一段一直看不明白:
class PrimeNumber{
int count = 0;
int number = 2;
public void isPrime(){
while(count<50){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; ……

------解决方案--------------------
number = 2时,divisor <= number/2 =1,
而for()循环是for(int divisor = 2; divisor <= number/2; divisor++)
divisor=2开始,因此当number=2时,不经for()循环,直接输出。
------解决方案--------------------
number=2的时候没进for循环