对找数程序的理解

经过几个小时的思考,总算是对老师出的这个程序题有了一定的了解。该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);
        }
      }
    }
  }
}

1、该程序的作用是进行查找一个能且仅能被两个在给定的数组中连续的数字不整除的数字,该数字的范围在-2^63~2^63直接的整数。给定的数组中的数字是2~31,从这里找连续的两个符合条件的整数,即rg数组。第一个for循环设定的是要找的这个数字的范围,第二个for循环设置的是查找两个整数,使其能够把数字i进行整除。而最后一个if语句的设定是保证找的数字是两个且能够使这两个数字能够是连续的,中间不间断。

2、这样的数字估计不存在。在VS2015版本下运行该程序,经过了将近一个小时的运算仍然没有结果。

4、在双核电脑下,应充分利用电脑的内存及处理器。让CPU进行并行处理任务的计算量。同时要想更高的利用内存以及CPU的性能最好还要修改一下程序的流程,更改程序数据结构,使其能够自动的利用较多的内存。

原文地址:https://www.cnblogs.com/sunbuqiao/p/5296027.html