素数计算器。这两个都正确吗?

时间:2015-11-10 13:31:19

标签: c algorithm primes

尝试编写用于显示素数的程序,只是想知道以下两种算法之间是否存在很大差异。

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);
    }
 }
}

在我看来,两者都有效,但我不确定,也许有人可以解释一下。

此外,任何开始编码的一般提示适用于所有程序员?

谢谢!

2 个答案:

答案 0 :(得分:2)

它们都具有相同的输出,因为您使用i = i + 2跳过偶数并使用i = 3开始循环。因此i % j == 0j = 2条件永远不会成立。

  

对我来说,似乎他们有相同的输出,但我无法检查每个数字

将您的方法包装到单独的函数中,将结果返回到数组中,然后比较两个数组。

答案 1 :(得分:1)

您可以非常快速地查看使用GNU / Linux或Cygwin的内置time函数完成这些操作所需的时间。使用G ++编译器,运行第一个片段需要0.109s,而0.141s运行第二个片段需要<?php $search = $_POST['search']; $text = file_get_contents('name_list.txt'); if(preg_match('#'.$search.'#i', $text)){ echo $search . " is compatible!"; } else { echo $search . " is not compatible!"; } 。所以我想这取决于你对#34更高效的定义&#34;是。注意:我没有检查结果的准确性,只是按原样运行程序。

对于一般编程技巧,您可以访问互联网上的无限信息,只需搜索编程提示。人们可以在&#34;提示&#34;上写一整本书。对于初学程序员。 Here就是一个很好的例子。