请问C语言编程问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 04:47:54
#include <stdio.h>
main()
{
int m,k,i;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k) printf("%d是素数",m);
else printf("%d不是素数",m);请问这里的 IF(I>K)为什么他就是素数呢?

for(i=2;i<=k;i++)
if(m%i==0) break;
for循环跳出的可能有两个:一是m%i=0,二是i>k.
第一种情况m%i=0:m被i整除,只能被本身和1整除的数是素数。所以我们只需要判断i是不是等于1和m,而i是从2开始循环的,所以只要判断i是否等于m。由循环中的i<=k知道i肯定是不能等于m的,所以i不等于1和m,所以m必不是素数。
第二种情况i>k:表明i从2循环到k,m%i==0都不能成立。那么m必然是素数。因为m不能被2到k之间的任何数整除。

所以我们只需要在循环之后判断i是否大于k就能知道m是不是素数。
也就是if(i>k) printf("%d是素数",m);
else printf("%d不是素数",m);

因为当(i>k)时,就说明m对所有的i都满足(m%i!=0),所以说m就是素数也就是说最终 i 因为不满足条件(i<=k)而跳出循环,所以就有i>k时,m就是素数
不知道这样子说你名不明白呢

呵呵~~~~!
看了上面各位的解释我忽然大悟啊.
还有上面那个程序也比我写得好.
我还忘记了sqrt()函数失败`````````.