日期:2014-05-17  浏览次数:20925 次

发个题目大家娱乐一下
有N个Int32范围内的正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。N可能会达到5w规模。问题不涉及什么高深的知识,所以比较适合讨论。

------解决方案--------------------

int max = int.MinValue;
for(i = 0; i < data[i]; i++) {
   for(j = 0; j < data[j]; j++) {
          int p, q;
          if(data[i] <= data[j]) {
             p = data[i]; q = data[j];
          } else {
             p = data[j]; q = data[i];
          }
          int value = 辗转相除法(p, q);
          if(max < value) {
             max = value;
          }
   }
 }

辗转相除法:
int suv_div(int p, int q) { 
  r = q % p;
  if(r == 0) {
     return p;
  }
  suv_div(r, p);
}

纯属抛砖引玉

------解决方案--------------------
低效的一个算法
 static void Main(string[] args)
        {
            const int count = 500; //整数个数
            int[] arry = new int[count];
            Random rnd = new Random();
            for (int i = 0; i < count; i++)
                arry[i] = rnd.Next(Int32.MaxValue-1)+1;

            DateTime t1 = DateTime.Now;
            int x=0, y=0, z=0;
            for (int i = 0; i < count; i++)
            {
                for (int j = i + 1; j < count; j++)
                {
                    int m = MaxY(arry[i], arry[j]);
                    if (x < m)
                    {