在这种情况下如何制作循环?

时间:2013-07-31 14:27:41

标签: c int boolean do-while

我需要计算前100个素数,但在输出中我得到“9”而其他数字在我的数字中....................... i想要计算前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);

}

3 个答案:

答案 0 :(得分:0)

我不知道你在编写什么语言,所以我猜这个(我还不能发表评论) -

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

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

答案 1 :(得分: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之前切换kor=sqrt(1); continue它将起作用。 一旦你进入这一部分,你就不需要检查是否有东西,因为你总是将2加到一个奇数。 BTW为什么说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); } 是循环中的最后一件事? 这可能会更好(我冒昧地把它放在一个函数中):

{{1}}

答案 2 :(得分: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;
}