0

我需要计算前 100 个素数,但在输出中我得到“9”和其他数字......................前 100 个素数

{
bool prime; int start, new, kor,k, i,gg;
start=1; 
k=1 ;
gg=0;
do 
{ 

    if (start < 2) {new = 2;}
    if (start == 2) {new = 3;}
    if (start > 2) { 
        if ((new % 2) == 0) 
        new--; 
        do {
            prime  = true; 
            kor=sqrt(new); 
            new+=2;
            for (i=3;prime&& (i<=kor); i+=2) {
                            if (new % i == 0) 
                                prime=false;}
        } while (!prime) ;    
    }  
    gg++;
    printf("%d->%d\n",gg, new);
    k++;
    start++;
    continue;
} 
    while (k<101);

}
4

3 回答 3

0

if (start < 2) {new = 2;}
if (start == 2) {new = 3;}

你有第一个和第二个数字的特殊情况。下一次do...while循环我们跳过 for 循环,因为kor是 1,从而打印 5。我们没有检查,所以也许我们很幸运。闻起来好像我们检查得不够远。

下一次,之后

kor=sqrt(new1); new1+=2;

kor是 2,所以我们再次不执行 for 循环,并打印 7。下次我们遇到相同的情况。kor 仍然是 2,所以你得到 9。

如果你在它之前切换到new+=2会起作用。一旦你进入这部分,你就不需要检查是否是偶数,因为你总是在奇数上加 2。顺便说一句,为什么它说是循环中的最后一件事?这可能会更好(我冒昧地将它放在一个函数中):kor=sqrt(1);continue

void find_primes()
{
    bool prime; int start, new, kor,k, i,gg;
    start=1; k=1 ;gg=0; 
    do 
    { 
        if (start < 2) {new = 2;}
        if (start == 2) {new = 3;}
        if (start > 2) { 
            do {
                prime = true;
                new+=2;
                kor=sqrt(new);
                for (i=3;prime&& (i<=kor); i+=2) {
                    if (new % i == 0) 
                        prime=false;
                }
            } 
            while (!prime) ;
        }
        gg++; printf("%d->%d\n",gg, new); 
        k++;
        start++;
    }
    while (k<101);
}
于 2013-07-31T14:53:22.500 回答
0

我不知道你在用什么语言编程,所以我猜测一下(我还不能评论)-

您是否在答案中得到所有奇数作为输出?9, 11, 13, 15... 似乎您正在打印出所有“新”值,无论素数是否为真。也许你应该放一个

if (prime) {
    printf("%d->%d\n",gg, new);
}

那里

于 2013-07-31T14:44:22.383 回答
0
here is an example program from: 
    http://www.programmingsimplified.com/c/source-code/c-program-for-prime-number

note: 1 is not a prime number, see:
    http://primes.utm.edu/notes/faq/one.html




#include<stdio.h>

int main()
{
    int n, i = 3, count, c;

    printf("Enter the number of prime numbers required\n");
    scanf("%d",&n);

    if ( n >= 1 )
    {
        printf("First %d prime numbers are :\n",n);
        printf("2\n");
    }

    for ( count = 2 ; count <= n ;  )
    {
        for ( c = 2 ; c <= (i - 1) ; c++ )
        {
            if ( i%c == 0 ) break;
        }

        if ( c == i )
        {
            printf("%d\n",i);
            count++;
        }
        i++;
    }

    return 0;
}
于 2014-06-10T07:51:00.670 回答