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;
}