读书笔记之编程之美 - 2.20 程序理解和时间分析

来源:互联网 发布:linux mv除了文件夹 编辑:程序博客网 时间:2024/06/06 15:04

问题1:

代码的关键是那个break,如果找到3个不能整除的数,内层for循环就退出了,必须正好从30个数里面找到2个数不能整除,而且这两个数还要连续。所以问题一的答案是,某个数不能且仅不能被2~31之间连续的两个数整除

问题2:

这个问题先看看是否任意连续两个数都可以作为结果用到的那两个数。

分析rg[]中15 = 3 x 5这个数,如果某数可以被3和5整除,那么也一定能被15整除,因此15不可能是连续2个数中间的一个,例如30可以被3和5整除,则一定可以被15整除,这样15就不会是结果可以用的那两个不可以整除的数。分析rg中的25 = 5 x 5,一个数可以被5整除,却不一定能被25整除,例如i = 30这个数。所以满足条件的数只能是素数或者完全平方、多次方这样的数。也就是:

2 3 4 5  7 8 9 11 13 16 17 19 23 25 27 29 31

其中连续的有,(2,3)(3,4)(4,5)(7,8)(8,9)(16,17)

所要的结果就是除了这其中两个数的公倍数,而最小的公倍数当然是对于(16,17)这两个数来说的。

不过求最小公倍数也得费半天功夫,我算的结果是2123581660200

问题3:

由于不知道%指令周期是多少,暂时不想这个问题了。

原创粉丝点击