C语言素数的的判别式疑问

下面语句中if(i>=k+1)printf(“%disaprimenumber\n”,m);为什么if(i>=k+1)即I>sqrt(m),可以判定素数,可是整个语句里没... 下面语句中
if(i>=k+1)
printf(“%d is a prime number\n”,m);
为什么if(i>=k+1)即I>sqrt(m),可以判定素数,可是整个语句里没有看出给定m%i==0也可以是素数的的定义啊,当然是除了i<=sqrt(m)的情况。
素数不就是排除 上述中当i<=sqrt(m) sqrt(m)%i==0且当i>sqrt(m) qrt(m)%i==0时为素数,

可是上图的程序里没看到i>sqrt(m) qrt(m)%i==0的判断 只有一个if(i>=sqrt(m)+1)的判定,这个范围好大并没有明确指出 i>sqrt(m) qrt(m)%i==0。
展开
 我来答
郝在益
2013-07-29 · TA获得超过2079个赞
知道小有建树答主
回答量:1496
采纳率:54%
帮助的人:725万
展开全部
因为在for语句里,一旦有某一个数是这个数的因子,那么就是执行break语句,跳出for循环,这个时候,i绝对会<=k的,也就是说这个时候i<k+1的。
只有当从2~~~k之间没有这个数的因子的时候,for语句才能完全全部执行下去,这个时候才能是i=k+1.
所以一旦i>=k+1,那就证明for语句的所有循环都执行到了,也就是没有执行if语句里的语句,也就是说在2~~~k之间没有这个数的因子,那么,这个数也就是素数了。
满意请采纳!!
更多追问追答
追问
,“一旦i>=k+1,那就证明for语句的所有循环都执行到了” 可是For的循环中不是限定死了for(i=2,i=k+1了,,莫笑话我,我刚学,在看例题。。。
追答
for循环的最后一个循环的时候,i是等于k的,循环体结束后,会执行i++,这个时候i就等于k+1,因此,此时i=k+1了。
Gtr720
2013-07-29 · TA获得超过325个赞
知道小有建树答主
回答量:945
采纳率:50%
帮助的人:392万
展开全部
你确定程序是对的吗? break的位置 还有括号 及其乱
在k之前如果没有出现bradk跳转,那么K+1 之后就不用测试了
它必定是素数。所以i>k+1 if(m%i==0)只是在反复测试这句
但是你的程序本身应该是有错误的。你else错了。写的太乱了 没有逻辑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e6b6f61
2013-07-30 · 超过17用户采纳过TA的回答
知道答主
回答量:69
采纳率:100%
帮助的人:29.7万
展开全部
是这样的。。。m除以从2到根号m之间的数,如果某一位除断了,就说明不是素数。当i自增到大于根号m之后还没有出现除断的情况,那么说明m是素数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-07-30 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:4584万
展开全部
判别素数的方法举例来说:
比如这个数m=127,我们在判断是否素数时需要用i从2开始一直到126的各个整数当作除数计算m/i是否能整除,如果整除了,当前的i就是m的因数从而m就不是素数了,程序中m%i==0就是这个判断,只不过判断的是除法的余数是否为0而已。
在数学上,我们发现没有必要一定要算2到126做除数这么多,而只需要算2到根号m(对于m=127,算到11即可得出判断),所以你会看到循环结束条件变成了根号m。这好比你已经判断了m除以4除不尽,而就可以不去算m除以4的平方16了,也必然除不尽。具体请查数学中对此的解释。
另外程序中k=sqrt(m);应写成k=sqrt((double)m);
追问
大侠,您发的是在解释k=sqrt((double)m);2到根号m除不尽为素数,,我只是不明白上面资料例题语句后面为什么要跟一个if i>=k+1,  就像下面那位仁兄说的,“一旦i>=k+1,那就证明for语句的所有循环都执行到了” 可是For的循环中不是限定死了for(i=2,i=k+1了,,莫笑话我,我刚学,在看例题。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式