C# 实现求10、9、8、7、6、5、4、3、2的最小公倍數!!

解决方案 »

  1.   

    “最小公倍数”求法
    http://blog.aqedu.cn/user1/evelovecj/archives/2008/32226.html
      

  2.   

    int GCD(int a,int b)  
     {   
      int i,temp_gcd;  
     for(i=a;i>=1;i--)  
     {   
      if(a%i==0)   
      {   
      if(b%i==0)   
      {   
      temp_gcd=i;   
      return temp_gcd;
      };
      };   
      };   
      }  
     int LCM(int a,int b)  
     {   
       int temp_lcm;   
       temp_lcm=a*b/GCD(a,b); //最小公倍数等于两数之积除以最大公约数   
       return temp_lcm;   
      }
    群里一个哥们写的 不知道对不对 我还是个菜鸟
      

  3.   


            public static Int32 GetMinGB(Int32[] arr)
            {
                Int32 min = 0;
                for (Int32 i = arr.Max(); true; i++)
                { 
                    Boolean flag = true;
                    for (Int32 j = 0; j < arr.Length; j++)
                    {
                        if (i % arr[j] != 0)
                        {
                            flag = false;
                            break;
                        }
                    }
                    if (flag)
                    {
                        min = i;
                        break;
                    }
                }            return min;
            }最慢的穷举...
      

  4.   

    第一次见这样写的GCD,难道忘了小学学的辗转相除了?
    BTW,这个问题如果说有些难度,主要是需要考虑大数的问题。
      

  5.   

    呵呵,俺现实了“大(小)数扩倍法”,for 加 while 就可以了lz 可以自己封装一下,记得加上排序的哦,否则数多的时候效率会比较低L@_@K
                /*
                 * 求 10、9、8、7、6、5、4、3、2 的最小公倍数。
                 * least common multiple
                 * 
                 * 算法原理: 大(小)数扩倍法 
                 * 要求两个数的最小公倍数,其中较大数不是较小数的倍数,可把较大数(或较小数)扩大2倍、3倍、4倍……
                 * 从小扩大到某一倍数后所得的数正好是较小数(或较大数)的倍数,那么这个数就是这两个数的最小公倍数。 
                 * 大(小)数扩倍法适用于求两个以上数的最小公倍数。
                 * 
                 * 例:求8和18的最小公倍数。 
                 * 解:因为18×2=36,36不是8的倍数: 
                 * 18×3=54,54不是8的倍数; 
                 * 18×4=72,72是8的倍数; 
                 * 所以[8,18]=72。
                 */
                int[] numbers = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };            int firstNumber, secondNumber;
                int leastCommonMultiple = numbers[0];
                for (int i = 1; i < numbers.Length; i++)
                {
                    firstNumber = leastCommonMultiple;
                    secondNumber = numbers[i];
                    while ((leastCommonMultiple % secondNumber) != 0)
                    {
                        leastCommonMultiple += firstNumber;
                    }
                    Console.WriteLine(secondNumber);
                    Console.WriteLine(leastCommonMultiple);
                    Console.WriteLine("----- ----- ----- -----");
                }
      

  6.   

    最终结果是 2520另,int firstNumber, secondNumber;
    应改为
    int largeNumber, smallNumber;
    其他地方自己改哈,这样更符合算法,容易理解!9
    90
    ----- ----- ----- -----
    8
    360
    ----- ----- ----- -----
    7
    2520
    ----- ----- ----- -----
    6
    2520
    ----- ----- ----- -----
    5
    2520
    ----- ----- ----- -----
    4
    2520
    ----- ----- ----- -----
    3
    2520
    ----- ----- ----- -----
    2
    2520
    ----- ----- ----- -----
      

  7.   

    偷懒,用类库写了一个算1-100的最小公倍数的。69720375229712477164533808935312303556800
    using System;
    using System.Numerics;namespace Extension_Methods_Simple
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] nums = new int[100];
                for (int i = 0; i < nums.Length; i++)
                    nums[i] = i + 1;            BigInteger lcm = 1, gcd;            for (int i = 0; i < nums.Length; i++)
                {
                    gcd = BigInteger.GreatestCommonDivisor(lcm, nums[i]);
                    lcm *= (nums[i] / gcd);
                }            Console.WriteLine(lcm);
                Console.ReadKey();
            }
        }
    }