一直在尝试编写显示素数的程序,只想知道以下两种算法之间是否有很大的区别。
1个,

#include <stdio.h>
#define MAXNUMB 100000

int main(void){
   int flag;
   long i,j=MAXNUMB;
   printf ("The Prime Numbers up to %ld are:\n       2\n", j);
   for(i=3 ; i<=MAXNUMB; i = i+2){
       j = 3;           //only difference is in this line
       flag = 0;
       while((j*j <= i) && flag == 0){
            if(i%j == 0){
                flag = 1;
            }
            j++;
      }
      if (flag == 0){
         printf("%8ld\n",i);
      }
  }
}

2个,
  #include <stdio.h>
  #define MAXNUMB 100000

  int main(void){
     int flag;
     long i,j=MAXNUMB;
     printf ("The Prime Numbers up to %ld are:\n       2\n", j);
     for(i=3 ; i<=MAXNUMB; i = i+2){
        j = 2;       //again this is the only different line
        flag = 0;
        while((j*j <= i) && flag == 0){
             if(i%j == 0){
                flag = 1;
            }
            j++;
    }
    if (flag == 0){
        printf("%8ld\n",i);
    }
 }
}

在我看来,这两个工作,但我不确定,也许有人可以释放一些光。
另外,对于开始编写代码的人,有没有什么适用于所有程序员的一般技巧?
谢谢!

最佳答案

它们都有相同的输出,因为您跳过了带i = i + 2的偶数,并用i = 3开始循环因此i % j == 0条件在j = 2时永远不会为真。
在我看来,它们的输出是一样的,但我不能检查每一个数字
将方法包装成单独的函数,在数组中返回结果,然后比较两个数组。

关于c - 质数计算器。这些都正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33631187/

10-10 01:29