081270053 发表于 2010-11-8 18:38

手机回复的,不是故意的,见谅

小草远在天涯 发表于 2010-11-8 18:47

回复 081270053 的帖子


吓我一跳。没事,讲明原因,我不介意。是这样啊,那个程序我有点看不懂,而且又难背,所以自编一个来应付考试。

小草远在天涯 发表于 2010-11-8 18:51

回复 081270053 的帖子

还要讲效率,对的,我忘了,没办法,书上的程序实在看不懂,不知道怎么判断的?劳烦你有空上网时回复我。我不急。谢谢。
   

weiyi0822 发表于 2010-11-8 20:53

..........................

岑亮 发表于 2010-11-8 21:35

m如果不是素数,总可以表示成两个整数的乘积m=s*t, s和t中总有一个<=m,所以<sqrt(m)的数中总有一个可以被m整除

安树庭 发表于 2010-11-8 21:44

循环到sqrt(m)就可以了,不需要到m

haobo 发表于 2010-11-8 22:11

后面的程序效率高,一个数最大的可能约数不会超过Sqrt(m),没有必要2--m-1全走一遍
081270053 发表于 2010-11-8 18:36 http://www.madio.net/static/image/common/back.gif
同意

pengyumath 发表于 2010-11-8 22:54

后面的程序效率高,一个数最大的可能约数不会超过Sqrt(m),没有必要2--m-1全走一遍

081270053 发表于 2010-11-8 23:42

这样:
1、一个数对不是1或本身的任意一个数整除。你的程序利用x计算了它能整除的个数,然后判断;书上的程序是只要出现1个这样的约数,这个数就是合数就不用再判断了。用到了break节省运算次数。
2、范围上这个约数最大可能是sqrt(m)即这个数的平方根,所以没有可能是sqrt(m)到m之间的值,就不用运算这部分,又节省了效率。

小草远在天涯 发表于 2010-11-9 16:14

回复 岑亮 的帖子


   " 总可以表示成两个整数的乘积m=s*t, s和t中总有一个<=m,"这个让我更加懂了,谢谢。我总算搞懂了,要不然又要死记硬背了,我最讨厌这个了。太感谢了。
页: 1 [2] 3
查看完整版本: 判断一个数是否为素数(自编的)