繁体   English   中英

求C中的素数

[英]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

有用..

由于使用调试器很明显,该语句是错误的。 首先,检查是由357 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM