我有一个函数来确定给定的数字是否为素数。我一直在尝试编写一个函数来查找给定数字后面的下一个素数。问题是它只适用于某些数字。
我几乎只是给了我最好的猜测,所以如果写得不好那就是原因。
# 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没有用。
答案 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;
}