求100以内素数的有关问题

求100以内素数的问题程序A:int iint jfor(i2i100i++){for(j2jij++){if (i%j0)breakif(i%j !

求100以内素数的问题
程序A:

int i;
int j;
for(i=2;i<100;i++){
for(j=2;j<i;j++){
if (i%j==0)
break;
if(i%j != 0);
printf("%d\n",i);
}


}

程序B:

int i,j;
for(i=2;i<100;i++ ){
  for (j=2;j<=(i/2);j++)
  if (i%j==0)
  break;
  if (i%j!=0)
  printf("%d\n",i);
}


程序B是正确的,A是我自己写的,我在二层循环的时候蒙圈了……B的那个二层循环j<=i/2是怎么个意思,还有两个程序只是差了一个大括号,求高手指点一下,谢谢

[解决办法]
i/2这是对循环次数的进一步限定,通过分析可以知道,100以内的公约数,比如99,不需要使用99去除49以后的值,因为怎么除也不会除尽的。采用i/2这样可以减少循环次数,提高效率。你可以使用另一种方法,还能够减少循环次数,提高效率,那就是循环次数为sqrt(i);
多的一个括号,应该在break之后结束二层的循环,不然是素数也不会输出的,因为break跳出后就不会输出内容了。
[解决办法]
这个大括号相差的可多了,B程序可以按以下理解
int i,j;
for(i=2;i<100;i++ ){
for (j=2;j<=(i/2);j++)
{
if (i%j==0)
break;
}
if (i%j!=0)
printf("%d\n",i);
}

[解决办法]
楼主,这里有一种方法,参考下:
[code=C/C++][/code]
#include<stdio.h>
main()
{
int i,j;
int flag=0;
for(i=2;i<100;i++)
{for(j=2;j<i;j++)
{if(i%j==0) {flag=1;break;}
}
if(flag!=1) printf("%6d",i);
flag=0;
}
}
[解决办法]

C/C++ code
bool isPrime(int number)                 {     int i;    int k;    k = (int)sqrt((double)number);      // 用平方根,而非用number/2,相对提高速度sqrt(number)/2倍    for(i = 2; i <= k; i++)    {        if(number%i==0)             break;    }    if (i > k)  return true;            // 没有找到可以整除的除数,被除数是 prime number    else   return false;}
[解决办法]
探讨
i/2是减少不必要的循环,跟sqrt差不多!