用C打印出素数

时间:2014-01-15 21:47:42

标签: c for-loop numbers cs50

我正在尝试将素数打印到从用户获得的特定值。如果我只收到1的答案,我想我的for循环有问题吗?

#include <stdio.h>
#include <cs50.h>

int main (void)
{
    printf("Length: ");
    int length = GetInt();

    bool notPrime = false;

    for (int i = 1; i < length; i++)
    {
        for (int k = 1; k <= i/2; k++)
        {
            if (i % k == 0)
            {
                notPrime = true;
                break;
            }
            else
            { 
                notPrime = false;
            }   
        }
        if (notPrime == false)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
}

3 个答案:

答案 0 :(得分:5)

在内部循环中:

for (int k = 1; k <= i/2; k++) 

您从k = 1开始,并测试k是否i1除以任何整数,因此答案将始终为“非素数”,但情况并非如此(请记住素数的定义)。从2开始:

for (int k = 2; k <= i/2; k++) 

答案 1 :(得分:3)

在内部循环中:

for(k=2; k<=sqrt(i); k++) 

会奏效。

答案 2 :(得分:0)

您可能需要检查特殊情况,您可以从3开始。 你也可以增加2来排除配对数字:

for(int i = 1; i < length; i++){

    if(number < 2) prime = true; 
    if(number == 2) prime = false;
    if(number % 2 == 0) prime = false; 
    for (int k = 3; k <= i/2; k++){
        if(number % i == 0 ){ 
            prime = false;
            break;
        }
    }
    if (prime){
        printf("%d ", i);
    }
}

你应该将IF从第一个bucle中取出,你也可以改变k&lt; = i / 2 - &gt; SQRT(I)