C中的素数程序

时间:2014-10-31 03:43:18

标签: c primes

这个程序应该打印第一个x素数,但我注意到它打印了一些非素数,例如27或35。 我已经看了几个小时,似乎没有任何东西出现。所以,如果你知道什么是错的,请告诉我。

#include <stdio.h>
int main(){
    int i=0, cont=2, prim=2, quant;
    printf("Insert number of prime numbers you wish: ");
    scanf("%d", &quant);
    printf("The first %d prime numbers are:\n", quant);
    while(i<quant){
        if(prim%cont!=0 && (cont>1 && cont<prim)){
            cont++;
        }
        else if(prim%cont==0 && (cont>1 && cont<prim)){
            prim++;
        }
        else if(prim%cont==0 && cont==prim){
            printf("%d\n", prim);
            prim++;
            cont=2;
            i++;
        }
    }
    return 0;
}

4 个答案:

答案 0 :(得分:0)

试试这个

#include<stdio.h>

int prime(int n)
{
    int i, j, len=1, brk=0;
    int list[200]={2};
    for(i=2; i<=n; i++)
    {
        for(j=0; j<len; j++)
        {
            if(i%list[j]==0){
                brk=1;
                break;
            }
            else
            {
                brk=0;
            }
        }
        if(brk==0)
        {
            list[len]=i;
            len++;
        }
    }
    for(i=0; i<len; i++)
        printf("%d ",list[i]);
}

main()
{
    int i, n;
    scanf("%d",&n);
    prime(n);
}

答案 1 :(得分:0)

@PKDOJ 如果系列设置在 30 以内。你可以盲目地使用下面的逻辑。但没有超过那个系列。添加 i%11 也会清除 77。效率不高

    if ((i % 2) && (i % 3) && (i % 5)&&(i%7)&&(i%11))

答案 2 :(得分:-1)

代码:

int count = 0, quant = 5, i, j;

int flag = 0;
for(prim = 2 ; count <= quant ; prim ++) {
    flag = 0;
    for(j = 2; j < prim/2; j++) {
        if(prim % j == 0) {
            flag = 1;
            break;
        }
    }
    if(flag == 0) {
        printf("%d\n", prim);
        count++;
    } 
}

将您的代码更新为:

while(i<quant){
    if(cont<prim) {
        if(prim%cont!=0) {
            cont++;
        } else {
            prim++;
            cont = 2; // restart cont
        }
    }
    else if(prim%cont==0 && cont==prim){
        printf("%d\n", prim);
        prim++;
        cont=2;
        i++;
    }
}

答案 3 :(得分:-1)

简单的方法是找到:如果一个数字不能被2,3&amp; 5,它是一个素数。

#include <stdio.h>

int main()
{

    int num = 35;
    int i = 5;
    printf("1 2 3 5");
    while (i <= num)
    {
        if ((i % 2) && (i % 3) && (i % 5))
        {
                printf(" %d",i);

        }
        i++;
    }
    printf("\n");
    return 0;
}