查找下一个素数逻辑错误

时间:2014-01-27 05:50:52

标签: logic output primes

我有一个函数来确定给定的数字是否为素数。我一直在尝试编写一个函数来查找给定数字后面的下一个素数。问题是它只适用于某些数字。

我几乎只是给了我最好的猜测,所以如果写得不好那就是原因。

# include <stdio.h>

int next(int);
int is_prime(int);

int main()
{
        int num;
        printf("Enter a number\n");
        scanf("%d", &num);

printf("next prime is %d\n",  next(num));

return 0;

下一部分是检查其是否为素数

is_prime(int n)
{
        int i, test=0;

        for (i=2; i<=n/2; i++)
        {
                if(n%i==0)
                {
                        test++;
                        break;
                }
        }
        if (test==0)
                return 1;
         else
                return 0;
}

现在检查下一个素数的功能

int next(int x)
{
        int y, i;

        for(i=x+1; i>0;  i++)
        {
                if(is_prime(i)==1)
                                return i;
                                break;
        }
}

我不知道这是否重要,但有些样本在6,10和12之间有效 但是7,8,13和14没有用。

1 个答案:

答案 0 :(得分:1)

您的问题是break声明,请将其删除。

int next(int x)
{
    int y, i;

    for(i=x+1; i>0;  i++)
    {
        if(is_prime(i)==1)
            return i;
            break;       //delete this line
    } 
}

发生的事情是,在每次第一次测试后,您立即突破循环。这就是6​​,10和12这样的数字正在发挥作用的原因。这是因为紧接着的下一个数字是素数。对于下一个立即号码不是素数的其他情况,这将不起作用;如果没有达到素数就会破裂。如果要在if-branch中执行多个语句,则必须将它们包装在{}大括号中。

这是if-branch中多个语句的正确形式:

if(is_prime(i)==1)
{
    return i;
    break;  
}