int m,i,k; scanf("%d",&m); k=(int)sqrt(m); for(i=2;i<=k;i++) i f(m%i==0)break; if(i>=k) printf("%d

是素数\n",m);elseprintf("%d不是素数\n",m);}问题一:if(i>=k)printf("%d是素数\n",m);难道for没有排除完吗问题二:in... 是素数\n",m);
else

printf("%d 不是素数\n",m);
}
问题一:
if(i>=k)
printf("%d 是素数\n",m);

难道for没有排除完吗
问题二:
intsqrt(m);前面的int是不是都可以不用写
展开
 我来答 举报
匿名用户
2012-11-21
展开全部
问题一没弄明白你想问什么,根据我的经验你的程序for循环当中应该少一部分
问题二:可以不用写,加int这样表示强制转换,因为已经定义k为int型变量,所以赋值时会根据k的类型赋值,所以不用加int也可以得到想要的结果。不懂可以看谭浩强c语言,那上面讲得很清楚。
追问
就是
if(i>=k)
printf("%d 是素数\n",m);
是什么意思呢为甚么i>=k呢
追答
你看一下上面那个for循环里的判断,如果要检验的数m能被i整除则跳出,break的功能是不执行本次循环后面的语句,并且跳出循环,不再执行。如果一直都不能整除,循环结束时i已经自加到k,这说明这个m除了1跟它自身没有其他的约数了,它是一个素数;如果出现整除,执行break跳出循环,这时的i一定是小于k的一个数,所以,用
if(i>=k)
printf("%d 是素数\n",m);
这条语句才能最终判断是不是素数,这样说你能明白吗???
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式