阅读程序
这次阅读的是c#程序代码,由于没接触过,还查了查c#的使用。不过大致还是能看懂的。阅读代码如下:
using System; using System.Collections.Generic; using System.Text; namespace FindTheNumber { class Program { static void Main(string[] args) { int [] rg = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31}; for (Int64 i = 1; i < Int64.MaxValue; i++) { int hit = 0; int hit1 = -1; int hit2 = -1; for (int j = 0; (j < rg.Length) && (hit <=2) ; j++) { if ((i % rg[j]) != 0) { hit++; if (hit == 1) { hit1 = j; } else if (hit == 2) { hit2 = j; } else break; } } if ((hit == 2)&& (hit1+1==hit2)) { Console.WriteLine("found {0}", i); } } } } }
网上搜索得知Int64为64位有符号整数,搜索MaxValue为Int64最大可能值。百度到的测试值代码及运行结果---->
运行结果来看Int64/2结果有19位!
i为从1开始一直到Int64的最大数,作为被除数;rg[]中的数作为除数;hit记录做了几次除法;hit1,hit2分别记录第一个,第二个不能整除的数。
从循环以及判断条件来看,我认为这段程序是要找一个不能被rg数组中两个连续的数整除,能被这两个数后的一个数整除,将这样的一个数打印出来。
在VS上运行程序,等了十多分钟也没见结果,Int64也确实很大。
和湾姐讨论了好久,还算了好久,觉得自己可以将数算出来。开始将问题想得简单,认为最后两个数30,31的最小公倍数930不能被29,28整除便觉得930就是这个数了,于是直接将i改成930测试(Hello World 判断是否运行结束)
发现不对,930并不是那个满足条件的数。我们又仔细的想了想认为这个数可能是不存在的,不能被2~31中两个连续的数整除,但能被其余的任何一个数整除。个人觉得这样的数不存在。
多核计算机处理这个程序是否可以用到多线程处理,程序并发执行。只是操作系统课有讲过多线程,而具体怎么做也是不明白……
对于问题三,估计运行时间,真的是估计不出来……