当前位置: 代码迷 >> C语言 >> 请大家帮解决一下,先谢了
  详细解决方案

请大家帮解决一下,先谢了

热度:142   发布时间:2005-03-10 12:17:00.0
请大家帮解决一下,先谢了
#include <math.h>
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k) printf("%d is a prime muber\n",m);
else printf("%d is a not prime mumber\n",m);
}
在第7行的循环里i<=k,
但在第9行的选择语句的条件里i>k.
我想了很久都想不出,这是为什么,请大家帮我解释一下。
----------------解决方案--------------------------------------------------------
这是求一个数是否是素数的题!!!
在7行里的i<k是要,求除了1和它本身的其它数是否能补整除,如果可以的话,就说明不是素数,否则就有可能是,这就要看下面的限制了,9行里的i>k就是这个限制作用,一定要在要整个循环结束时才对,
例如:8,在循环没有结束时,第一个条件就成立了,但它不是素数,它没有满虽下一个条件,~~~~~
----------------解决方案--------------------------------------------------------
k=sqrt(m);k是一个确定的数,在循环里i<=k;如果循环结束,除非i++,否则i>k,做为第二个条件是怎么来的?
----------------解决方案--------------------------------------------------------
在for里的第三个表达式不就是i++吗,它改变了i的值啊,
所以当整个循环结束后,i的值才大于k
----------------解决方案--------------------------------------------------------
我认为i从2到k循环中没有能被m整除的,说明是素数,循环结束,i还要再自加,就变成了i+1了当然是大于k了阿,不知道我说的对不对。
----------------解决方案--------------------------------------------------------
因为编成的风格不好所以没有看懂吧!我改了该
#include <math.h>
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
{
      if(m%i==0)
            break;
}
if(i>k)
       printf("%d is a prime muber\n",m);
else
        printf("%d is a not prime mumber\n",m);
}

现在应该知道为什么把

[此贴子已经被作者于2005-3-11 10:55:42编辑过]



----------------解决方案--------------------------------------------------------
  相关解决方案