Logic 查找下一个素数逻辑错误

Logic 查找下一个素数逻辑错误,logic,output,primes,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); pr

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

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

# 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;
我不知道这是否重要,但有些样本在6、10和12处有效
但是7、8、13和14不起作用。

您的问题是
中断
语句,请删除它。

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分支中执行多条语句,必须将它们用大括号括起来

这是if分支中多条语句的正确形式:

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

np,请阅读更新,它将帮助您解决类似问题。替换
for(i=2;iWhy根据eazars的建议,我删除了闯入
int next(int x)
,它可以工作。是的,通过我的更改,它会工作得更快。:)我不是故意的,而是回答,对不起,我不清楚@Bradg89,@Will Ness是对的,基本上他使用的是一个古老的数学技巧,即你只需要测试从2到n的平方根的除数,而不是一直到n/2@奈斯会简单地用另一种方式来表达这一点吗?他将
n^1/2
平方,然后将
i
平方,以重新声明
中的等式对不起,这个不等式当然应该是
i^2
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
    } 
}
if(is_prime(i)==1)
{
    return i;
    break;  
}