关于素数的小问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:32:34
fun的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。

#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
int fun(int m)
{
int i,k;
for(i=m+1;;i++)
{
for(k=2;k<i;k++)
if(i%k==0)
break;
if(k>=i)
return(i);
}
}
void main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
}

请解释一下去行过程,主要是这个语句:if(k>=i)
return(i);
k怎么可能大于或等于i呢?..想不通.循环中不是已经确定k<i了嘛?请指点,详细解析.
该程序在VC6++上运行过了,运行后,当输入11结果为13 当输入13结果为17。 程序本身并没有错误啊。。

楼上2个不要乱说,人家程序没问题。
如果一定要说有不妥当的,那也是把 K>=i 换成 k=i更和逻辑而已。计算素数的时候有必要“自己除自己”吗?

程序解读:

int fun(int m)
{
int i,k;

for(i=m+1;;i++) //i为最终要返回的数字
{
for(k=2;k<i;k++) //素数的定义是:除了1和自身,不能被其它任何
//正整数整除的数
//所以此处 除数从2开始直到 i-1;
if(i%k==0)
break; //这2句的作用是 判断 i 是否能被 k整除;
//如果余数为0(即此 i 不是素数),
//就跳出第二层for循环
//注意,如果余数为0,则此时的
// k不可能等于 i
//一定是小于i

if(k>=i) //这里如果用 k=i 做判断条件更合乎逻辑
return(i); //假设第二个for循环中,没有找到能使
// i 被整除的k
//则程序运行到这里的时候k=i ,即满足k>=i的条件
//那么就返回当前的 i 作为程序的最终结果
//第一层for 我就不说了,意思很清楚
}
}

for(k=2;k<i;k++) 如果找到一个素数,那么,一定是运行到(k<i)不成立,即k>=i时退出!

我感觉第二个for循环有错误,应该是k<=i;这样当找到那个素数时,也就是if(k==i)时,函数反回i的值。

第二个for循环有错误,应该是k<=i