尝试编写用于显示素数的程序,只是想知道以下两种算法之间是否存在很大差异。
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);
}
}
}
在我看来,两者都有效,但我不确定,也许有人可以解释一下。
此外,任何开始编码的一般提示适用于所有程序员?
谢谢!
答案 0 :(得分:2)
它们都具有相同的输出,因为您使用i = i + 2
跳过偶数并使用i = 3
开始循环。因此i % j == 0
时j = 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就是一个很好的例子。