
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。 展开
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。 展开
4个回答
展开全部
因为在for语句里,一旦有某一个数是这个数的因子,那么就是执行break语句,跳出for循环,这个时候,i绝对会<=k的,也就是说这个时候i<k+1的。
只有当从2~~~k之间没有这个数的因子的时候,for语句才能完全全部执行下去,这个时候才能是i=k+1.
所以一旦i>=k+1,那就证明for语句的所有循环都执行到了,也就是没有执行if语句里的语句,也就是说在2~~~k之间没有这个数的因子,那么,这个数也就是素数了。
满意请采纳!!
只有当从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了。
展开全部
你确定程序是对的吗? break的位置 还有括号 及其乱
在k之前如果没有出现bradk跳转,那么K+1 之后就不用测试了
它必定是素数。所以i>k+1 if(m%i==0)只是在反复测试这句
但是你的程序本身应该是有错误的。你else错了。写的太乱了 没有逻辑。
在k之前如果没有出现bradk跳转,那么K+1 之后就不用测试了
它必定是素数。所以i>k+1 if(m%i==0)只是在反复测试这句
但是你的程序本身应该是有错误的。你else错了。写的太乱了 没有逻辑。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是这样的。。。m除以从2到根号m之间的数,如果某一位除断了,就说明不是素数。当i自增到大于根号m之后还没有出现除断的情况,那么说明m是素数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判别素数的方法举例来说:
比如这个数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);
比如这个数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了,,莫笑话我,我刚学,在看例题。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询