阅读程序

这次阅读的是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中两个连续的数整除,但能被其余的任何一个数整除。个人觉得这样的数不存在。

多核计算机处理这个程序是否可以用到多线程处理,程序并发执行。只是操作系统课有讲过多线程,而具体怎么做也是不明白……

对于问题三,估计运行时间,真的是估计不出来……

 

posted @ 2016-03-19 14:21  崔露露  阅读(398)  评论(1编辑  收藏  举报