打字猴:1.700414828e+09
1700414828 计算机是怎样跑起来的 [:1700412662]
1700414829 计算机是怎样跑起来的 5.5 要点4:利用计算机的处理速度
1700414830
1700414831 这次再请思考求解“判定91是否是素数”这一问题的算法。在用于判定素数的典型算法中,有一个被称为“埃拉托斯特尼筛选法”的算法,在学习这个算法前,先请思考如果是在数学考试中遇到这道题,如何解答呢?
1700414832
1700414833 也许有人会这样想:用91分别除以比较它小的所有正整数,如果没有找到能够整除的数,那么91就是素数。但,如此繁琐的步骤可行吗?实际上这就是正确答案。埃拉托斯特尼筛选法是一种用于把某个范围内的所有素数筛选出来的算法,比如筛选100以内的所有素数,其基本思路就是用待判定的数除以比较它小的所有正整数。例如要判定91是否是素数,只要分别除以2-90之间的每个数就可以了(因为1肯定能够整除任何数,所以从2开始检测)。这个步骤用程序表示的话,就变成了如代码清单5.2所示的代码。Mod是用于求除法运算中余数的运算符。如果余数为0则表示可以整除,因此也就知道待判定的数不是素数了,程序执行结果如图5.4所示
1700414834
1700414835 代码清单5.2 判定是否是素数的程序
1700414836
1700414837 a=91
1700414838
1700414839 s=”素数”
1700414840
1700414841 For i=2 to (a-1)
1700414842
1700414843   If a Mod i =0 Then
1700414844
1700414845 s=”不是素数”
1700414846
1700414847 Exit For
1700414848
1700414849   End If
1700414850
1700414851 Next
1700414852
1700414853 MsgBox CStr(a)&s
1700414854
1700414855 图5.4 代码清单5.2的执行结果
1700414856
1700414857
1700414858
1700414859
1700414860 无论是多么冗长的繁琐的步骤,只要明确并且机械就能构成优秀的算法。把算法用程序表示出来让计算机去执行,而计算机会用令人吃惊的速度进行运算。为了判定91是否是素数,用91除以2-90这89个数据的操作一瞬间就可以完成。在思考算法时不妨时刻记着,解决问题时是利用计算机的处理速度的
1700414861
1700414862 作为利用计算机的处理速度解决问题的另外一个例子,请试着求解以下联立方程组。题目是鸡兔同笼问题:鸡和兔子共计10只,把它们的脚加起来共计32只,问鸡和兔子分别有多少只?设有x只鸡,y只兔子,那么就可以列出如下的联立方程组
1700414863
1700414864 x+y=10
1700414865
1700414866 2x+4y=32
1700414867
1700414868 因为鸡和兔子的只数应该都在0-10范围内,所以就试着把0-10中每个数依次代入x和y,只要能够找到使这两个方程同时成立的数值也就求出了答案。利用计算机的处理速度,答案一瞬间就出来了(如代码清单5.3和图5.5所示)
1700414869
1700414870 代码清单5.3 求解鸡兔同笼问题的程序
1700414871
1700414872 For x=0 To 10
1700414873
1700414874   For y=0 To 10
1700414875
1700414876 a=x+y
1700414877
[ 上一页 ]  [ :1.700414828e+09 ]  [ 下一页 ]