在C中找到素数

时间:2015-11-25 05:17:31

标签: c

我有这个代码用于素数..它给了我最高达103的素数。也许我的第一个断言是错的?我是这样做的,因为我想跳过尽可能多的数字。我只想要至少有两位数的素数(这就是为什么我从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);
    }
}

4 个答案:

答案 0 :(得分:4)

使用continue而不是break;在这里你想要跳过很多数字(好像有许多方法可以找到像复杂程度很小的Sieve of Eratosthenes这样的小数字素数),但它会中断。所以改变一点..

 if((i%3==0)&& ( i%5==0) && (i%7==0))

            continue;// here

它有效..

答案 1 :(得分:0)

使用调试器显而易见,该语句是错误的。首先,检查可被3 5 7整除的数字.105可被全部整除。然后你打破,这意味着“退出这个for循环”,所以程序将结束。您需要继续循环,而不是将此数字报告为素数。

您想要将循环更改为使用而不是。此外,下一个for循环不需要从3开始,因为你已经尝试了3,5,7。但是有没有理由,因为你可以只使用for循环?

我的建议是完全忘记第一个,因为它不会让它更快。

答案 2 :(得分:0)

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

答案 3 :(得分: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;
}
相关问题