一直在尝试编写显示素数的程序,只想知道以下两种算法之间是否有很大的区别。
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/