- 最后登录
- 2013-11-11
- 在线时间
- 873 小时
- 阅读权限
- 40
- 注册时间
- 2008-9-15
- 积分
- 1194
- 帖子
- 924
- 精华
- 6
- UID
- 44804
- 性别
- 保密

- 积分
- 1194
- 帖子
- 924
- 精华
- 6
- UID
- 44804
- 性别
- 保密
|
哈哈,不错,第一问和第三问跟我算的一样,交流以下程序设计经验很不错。我谈谈我的心得:
我用的是最简单易懂的VB6.0程序设计,我的想法是:
1:先设计一个子函数next9(),从1-9组成的任何一个九位数通过子函数next9(),可获得下一个1-9的九位数。
这样可以从初始九位数123456789,通过子函数next9(),遍举所有的1-9组成的九位数。
2:然后用一个for next 循环 检验整数m是否满足条件。
第一题:m从整数2开始逐渐增加,对于每个m检查是否存在一个九位数整除它。九位数从最小开始检验,遇到有一个九位数能整除,就跳到下一个m。直到发现所有的九位数都不能整除为止。记下m即可。其实对于每个m,大部分都不需要检验很多的九位数,因为遇到一个九位数能整除,余下的九位数就不用检验,跳到下一个m。
但在计算第二题10位数时,经常等了很久都没反应(因为我在每检验一定长度的m时,就会生成一个文件,记录下计算到哪个数字了。)经过调试和思考,发现每当m=10的倍数时,就要等很久,原来,按照我的遍举十位数的方法,要整除m(m是10的倍数)一定要遍举到0在个位时,0从最前位经过我的Next10函数,位置变到个位,花费大量的时间。后来就让遇到10的倍数就跳过,速度快多了。因为0在个位,前九位数就是1-9组成的九位数,按照第一题的结果,在计算m=5555*10=55550之前根本不用理会10的倍数。但由于时间原因,我还暂时只计算到14000之内,没有发现满足要求的结果。还有一个影响速度的原因是vb6.0中的整数最大只能是2147483647,所以对于大于它的十位数,只能通过一个转换来计算,影响了速度。用VB2005来变程就没这个问题了。
第三题:检查两个整数是否互质,设计一个函数来判断两个整数是否互质。利用辗转相除法,就可以判断,最后得到0就是含有公因数,得到1,就是互质。再利用Next9函数,检验方法同第一题。
------------------------------------------------------------------------------------------------------
在计算第一题和第三题都花不了多少时间,第二题费时间明显增加,按照金眼睛的答案,我可能还要继续运行1、2个小时或2、3个小时才能算出这个结果。 |
|