-2

我正在尝试打印出从用户那里获得的特定值的素数。如果我只收到 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");
}
4

3 回答 3

5

在内部循环中:

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

您开始k = 1并测试 if kdivides i1除以任何整数,所以答案总是“非素数”,事实并非如此(记住素数的定义)。开始于2

for (int k = 2; k <= i/2; k++) 
于 2014-01-15T21:50:28.203 回答
3

在内部循环中:

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

将工作。

于 2014-01-16T09:53:09.300 回答
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 <= i/2 -> sqrt(i)

于 2014-01-15T22:00:08.963 回答