[英]find the prime numbers in C
我有这个质数代码..它给了我最多 103 的质数。也许我的第一个 break 语句是错误的? 我这样做是因为我想跳过尽可能多的数字。我只想要至少有两位数的素数(这就是我从 11 开始的原因)
#include <stdio.h>
#define MAXNUMB 100000000
int main (void)
{
int i, j;
for (i = 11 ; i < MAXNUMB ; i += 2)
{
if ((i % 3 == 0) && (i % 5 == 0) && (i % 7 == 0))
break;
for (j = 3 ; j * j <= i ; j += 2)
{
if (i % j == 0)
break;
}
if (j * j > i)
printf ("%d \n", i);
}
}
使用continue
而不是break
; 在这里你想跳过很多数字(好像有很多方法可以找到小复杂度的素数,比如非常流行的埃拉托色尼筛法)但是它坏了。 所以稍微改变一下。。
if((i%3==0)&& ( i%5==0) && (i%7==0))
continue;// here
有用..
由于使用调试器很明显,该语句是错误的。 首先,检查是由3和5和7 105是所有整除。数字。 然后你打破,这意味着“退出这个for循环”,所以程序将结束。 您只需要继续循环,不要将此数字报告为质数。
您想更改循环以使用or代替and 。 此外,下一个 for 循环不需要从 3 开始,因为您已经尝试了 3、5、7。但是有没有理由这样做,因为您可以只使用 for 循环?
我的建议是完全忘记第一个,因为它不会使它更快。
#include <stdio.h>
#define MAXNUMB 100000000
int main (void)
{
int i, j, f;
for (i = 11; i < MAXNUMB; i += 2)
{
for (j = 2, f = 1; f && j * j < i; ++j)
{
f = (i % j != 0);
}
if (f) printf("%d\n", i);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define MAXNUMB 100000000
int main (void)
{
int i, j, P[MAXNUMB];
memset(P, 0, sizeof(P));
for(i = 2; i < MAXNUMB; ++i)
{
if(P[i] == 0){
printf("%d\n", i);
if(i < MAXNUMB / i)
for(j = i*i; j < MAXNUMB; j += i)
P[j] = 1;
}
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.