【问题标题】:Least common multiple for 3 or more numbers3个或更多数字的最小公倍数
【发布时间】:2010-09-13 22:25:34
【问题描述】:

如何计算多个数的最小公倍数?

到目前为止,我只能在两个数字之间进行计算。但不知道如何扩展它以计算 3 个或更多数字。

到目前为止,我是这样做的

LCM = num1 * num2 /  gcd ( num1 , num2 )

使用 gcd 是计算数字的最大公约数的函数。使用欧式算法

但我不知道如何计算 3 个或更多数字。

【问题讨论】:

  • 请不要将此标记为作业。我正在尝试找到一种将多块金属板安装到板上的方法,并且需要找到一种将不同长度的金属安装在同一板上的方法。 LCM 和 GCD 是最好的方法。我是程序员而不是数学家。这就是我问的原因。
  • 把小张装进一张大张——二维装箱?
  • @HighPerformanceMark 俄罗斯方块?

标签: algorithm math lcm


【解决方案1】:

这是一个 ECMA 风格的实现:

function gcd(a, b){
    // Euclidean algorithm
    while (b != 0){
        var temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

function lcm(a, b){
    return (a * b / gcd(a, b));
}

function lcmm(args){
    // Recursively iterate through pairs of arguments
    // i.e. lcm(args[0], lcm(args[1], lcm(args[2], args[3])))

    if(args.length == 2){
        return lcm(args[0], args[1]);
    } else {
        var arg0 = args[0];
        args.shift();
        return lcm(arg0, lcmm(args));
    }
}

【讨论】:

  • 我不明白你所说的“ECMA 风格”是什么意思,感觉很糟糕 =/
【解决方案2】:

Python 3.9 math 模块的 gcdlcm 支持数字列表。

import math

lst = [1,2,3,4,5,6,7,8,9]

print(math.lcm(*lst))

print(math.gcd(*lst))

【讨论】:

    【解决方案3】:

    在 Ruby 中,它很简单:

    > [2, 3, 4, 6].reduce(:lcm)
    => 12
    
    > [16, 32, 96].reduce(:gcd)
    => 16
    

    (在 Ruby 2.2.10 和 2.6.3 上测试。)

    【讨论】:

      【解决方案4】:

      这是一个 Python 单行代码(不计算导入),用于返回 1 到 20(含)整数的 LCM:

      Python 3.5+ 导入:

      from functools import reduce
      from math import gcd
      

      Python 2.7 导入:

      from fractions import gcd
      

      常见逻辑:

      lcm = reduce(lambda x,y: x*y // gcd(x, y), range(1, 21))
      

      请注意,在Python 2Python 3 中,运算符优先级规则规定*// 运算符具有相同的优先级,因此它们从左到右应用。因此,x*y // z 表示 (x*y) // z 而不是 x * (y//z)。两者通常会产生不同的结果。这对浮点除法无关紧要,但对floor division 却很重要。

      【讨论】:

        【解决方案5】:

        对于python 3:

        from functools import reduce
        
        gcd = lambda a,b: a if b==0 else gcd(b, a%b)
        def lcm(lst):        
            return reduce(lambda x,y: x*y//gcd(x, y), lst)  
        

        【讨论】:

          【解决方案6】:

          如果没有时间限制,这相当简单直接:

          def lcm(a,b,c):
              for i in range(max(a,b,c), (a*b*c)+1, max(a,b,c)):
                  if i%a == 0 and i%b == 0 and i%c == 0:
                      return i
          

          【讨论】:

          • 你能争论一个小于一组数的最大值的数怎么能是它们的整数倍?
          • @greybeard 你说得对,我把它改成了一组数字的最大值。它以最大数量为增量进行检查。
          • 这是一个改进。如果你继续这种思路,你会发现更多。
          【解决方案7】:

          它在 Swift 中。

          // Euclid's algorithm for finding the greatest common divisor
          func gcd(_ a: Int, _ b: Int) -> Int {
            let r = a % b
            if r != 0 {
              return gcd(b, r)
            } else {
              return b
            }
          }
          
          // Returns the least common multiple of two numbers.
          func lcm(_ m: Int, _ n: Int) -> Int {
            return m / gcd(m, n) * n
          }
          
          // Returns the least common multiple of multiple numbers.
          func lcmm(_ numbers: [Int]) -> Int {
            return numbers.reduce(1) { lcm($0, $1) }
          }
          

          【讨论】:

            【解决方案8】:

            这是 PHP 实现:

                // https://stackoverflow.com/q/12412782/1066234
                function math_gcd($a,$b) 
                {
                    $a = abs($a); 
                    $b = abs($b);
                    if($a < $b) 
                    {
                        list($b,$a) = array($a,$b); 
                    }
                    if($b == 0) 
                    {
                        return $a;      
                    }
                    $r = $a % $b;
                    while($r > 0) 
                    {
                        $a = $b;
                        $b = $r;
                        $r = $a % $b;
                    }
                    return $b;
                }
            
                function math_lcm($a, $b)
                {
                    return ($a * $b / math_gcd($a, $b));
                }
            
                // https://stackoverflow.com/a/2641293/1066234
                function math_lcmm($args)
                {
                    // Recursively iterate through pairs of arguments
                    // i.e. lcm(args[0], lcm(args[1], lcm(args[2], args[3])))
            
                    if(count($args) == 2)
                    {
                        return math_lcm($args[0], $args[1]);
                    }
                    else 
                    {
                        $arg0 = $args[0];
                        array_shift($args);
                        return math_lcm($arg0, math_lcmm($args));
                    }
                }
            
                // fraction bonus
                function math_fraction_simplify($num, $den) 
                {
                    $g = math_gcd($num, $den);
                    return array($num/$g, $den/$g);
                }
            
            
                var_dump( math_lcmm( array(4, 7) ) ); // 28
                var_dump( math_lcmm( array(5, 25) ) ); // 25
                var_dump( math_lcmm( array(3, 4, 12, 36) ) ); // 36
                var_dump( math_lcmm( array(3, 4, 7, 12, 36) ) ); // 252
            

            他的answer above (ECMA-style code) 归功于@T3db0t。

            【讨论】:

              【解决方案9】:

              这是我用的--

              def greater(n):
              
                    a=num[0]
              
                    for i in range(0,len(n),1):
                     if(a<n[i]):
                      a=n[i]
                    return a
              
              r=input('enter limit')
              
              num=[]
              
              for x in range (0,r,1):
              
                  a=input('enter number ')
                  num.append(a)
              a= greater(num)
              
              i=0
              
              while True:
              
                  while (a%num[i]==0):
                      i=i+1
                      if(i==len(num)):
                             break
                  if i==len(num):
                      print 'L.C.M = ',a
                      break
                  else:
                      a=a+1
                      i=0
              

              【讨论】:

                【解决方案10】:

                我正在寻找数组元素的 gcd 和 lcm 并在以下链接中找到了一个很好的解决方案。

                https://www.hackerrank.com/challenges/between-two-sets/forum

                其中包括以下代码。 gcd 的算法使用的欧几里得算法在下面的链接中有很好的解释。

                https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm

                private static int gcd(int a, int b) {
                    while (b > 0) {
                        int temp = b;
                        b = a % b; // % is remainder
                        a = temp;
                    }
                    return a;
                }
                
                private static int gcd(int[] input) {
                    int result = input[0];
                    for (int i = 1; i < input.length; i++) {
                        result = gcd(result, input[i]);
                    }
                    return result;
                }
                
                private static int lcm(int a, int b) {
                    return a * (b / gcd(a, b));
                }
                
                private static int lcm(int[] input) {
                    int result = input[0];
                    for (int i = 1; i < input.length; i++) {
                        result = lcm(result, input[i]);
                    }
                    return result;
                }
                

                【讨论】:

                  【解决方案11】:

                  在python中:

                  def lcm(*args):
                      """Calculates lcm of args"""
                      biggest = max(args) #find the largest of numbers
                      rest = [n for n in args if n != biggest] #the list of the numbers without the largest
                      factor = 1 #to multiply with the biggest as long as the result is not divisble by all of the numbers in the rest
                      while True:
                          #check if biggest is divisble by all in the rest:
                          ans = False in [(biggest * factor) % n == 0 for n in rest]
                          #if so the clm is found break the loop and return it, otherwise increment factor by 1 and try again
                          if not ans:
                              break
                          factor += 1
                      biggest *= factor
                      return "lcm of {0} is {1}".format(args, biggest)
                  

                  >>> lcm(100,23,98)
                  'lcm of (100, 23, 98) is 112700'
                  >>> lcm(*range(1, 20))
                  'lcm of (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) is 232792560'
                  

                  【讨论】:

                    【解决方案12】:

                    查找任意数字列表的 lcm 的函数:

                     def function(l):
                         s = 1
                         for i in l:
                            s = lcm(i, s)
                         return s
                    

                    【讨论】:

                      【解决方案13】:

                      只是为了好玩,一个shell(几乎任何shell)实现:

                      #!/bin/sh
                      gcd() {   # Calculate $1 % $2 until $2 becomes zero.
                            until [ "$2" -eq 0 ]; do set -- "$2" "$(($1%$2))"; done
                            echo "$1"
                            }
                      
                      lcm() {   echo "$(( $1 / $(gcd "$1" "$2") * $2 ))";   }
                      
                      while [ $# -gt 1 ]; do
                          t="$(lcm "$1" "$2")"
                          shift 2
                          set -- "$t" "$@"
                      done
                      echo "$1"
                      

                      尝试一下:

                      $ ./script 2 3 4 5 6
                      

                      得到

                      60
                      

                      最大的输入和结果应该小于(2^63)-1 否则shell 数学将换行。

                      【讨论】:

                        【解决方案14】:

                        还有 Scala 版本:

                        def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
                        def gcd(nums: Iterable[Int]): Int = nums.reduce(gcd)
                        def lcm(a: Int, b: Int): Int = if (a == 0 || b == 0) 0 else a * b / gcd(a, b)
                        def lcm(nums: Iterable[Int]): Int = nums.reduce(lcm)
                        

                        【讨论】:

                        • 更正 lcm 实现 def lcm(nums: Iterable[Int]): Int = nums.reduceRight(lcm)
                        【解决方案15】:

                        在 Python 中(修改为 primes.py):

                        def gcd(a, b):
                            """Return greatest common divisor using Euclid's Algorithm."""
                            while b:      
                                a, b = b, a % b
                            return a
                        
                        def lcm(a, b):
                            """Return lowest common multiple."""
                            return a * b // gcd(a, b)
                        
                        def lcmm(*args):
                            """Return lcm of args."""   
                            return reduce(lcm, args)
                        

                        用法:

                        >>> lcmm(100, 23, 98)
                        112700
                        >>> lcmm(*range(1, 20))
                        232792560
                        

                        reduce() 类似于 that:

                        >>> f = lambda a,b: "f(%s,%s)" % (a,b)
                        >>> print reduce(f, "abcd")
                        f(f(f(a,b),c),d)
                        

                        【讨论】:

                        • 我对python不熟悉,reduce()是做什么的?
                        • 给定一个函数 f 和一个列表 l = [a,b,c,d],reduce(f,l) 返回 f(f(f(a,b),c),d) .它是“可以通过迭代计算当前值的 lcm 和列表的下一个元素的 lcm 来计算 lcm 的功能实现。”
                        • +1 表示可以适应三个以上参数的解决方案
                        • 你能通过减少自身使 lcm 函数表现得像 lcmm 函数吗?我的第一个想法是当有 2 个参数时让它执行 lcm(),当有更多参数时执行 reduce()。
                        • @Hairy 逗号在 Python 中创建一个元组。在这种情况下,它相当于:t = a; a = b; b = t % b
                        【解决方案16】:

                        int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a%b); } int lcm(int[] a, int n) { int res = 1, i; for (i = 0; i < n; i++) { res = res*a[i]/gcd(res, a[i]); } return res; }

                        【讨论】:

                          【解决方案17】:

                          对于任何寻找快速工作代码的人,试试这个:

                          我写了一个函数lcm_n(args, num),它计算并返回数组args中所有数字的lcm。第二个参数num是数组中数字的个数。

                          将所有这些数字放入数组args,然后像lcm_n(args,num);一样调用函数

                          此函数返回所有这些数字的 lcm。

                          这里是函数lcm_n(args, num)的实现:

                          int lcm_n(int args[], int num) //lcm of more than 2 numbers
                          {
                              int i, temp[num-1];
                          
                              if(num==2)
                              {
                                  return lcm(args[0], args[1]);
                              }
                              else
                              {
                                  for(i=0;i<num-1;i++)
                                  {
                                     temp[i] = args[i];   
                                  }
                          
                                  temp[num-2] = lcm(args[num-2], args[num-1]);
                                  return lcm_n(temp,num-1);
                              }
                          }
                          

                          此功能需要以下两个功能才能工作。因此,只需将它们一起添加即可。

                          int lcm(int a, int b) //lcm of 2 numbers
                          {
                              return (a*b)/gcd(a,b);
                          }
                          
                          
                          int gcd(int a, int b) //gcd of 2 numbers
                          {
                              int numerator, denominator, remainder;
                          
                              //Euclid's algorithm for computing GCD of two numbers
                              if(a > b)
                              {
                                  numerator = a;
                                  denominator = b;
                              }
                              else
                              {
                                  numerator = b;
                                  denominator = a;
                              }
                              remainder = numerator % denominator;
                          
                              while(remainder != 0)
                              {
                                  numerator   = denominator;
                                  denominator = remainder;
                                  remainder   = numerator % denominator;
                              }
                          
                              return denominator;
                          }
                          

                          【讨论】:

                            【解决方案18】:
                            clc;
                            
                            data = [1 2 3 4 5]
                            
                            LCM=1;
                            
                            for i=1:1:length(data)
                            
                                LCM = lcm(LCM,data(i))
                            
                            end 
                            

                            【讨论】:

                            • 代码很受赞赏,但如果您可以添加 cmets 详细说明其工作原理,我们将更加感激。
                            • 虽然此代码 sn-p 可以解决问题,包括解释 really helps 以提高您的帖子质量。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
                            【解决方案19】:

                            ES6 风格

                            function gcd(...numbers) {
                              return numbers.reduce((a, b) => b === 0 ? a : gcd(b, a % b));
                            }
                            
                            function lcm(...numbers) {
                              return numbers.reduce((a, b) => Math.abs(a * b) / gcd(a, b));
                            }
                            

                            【讨论】:

                            • 您调用了gcd(a, b),但gdc 函数需要一个数组,因此您打算调用gcd([a, b])
                            • 这是迄今为止最优雅的答案
                            【解决方案20】:

                            方法 compLCM 采用向量并返回 LCM。所有数字都在向量 in_numbers 内。

                            int mathOps::compLCM(std::vector<int> &in_numbers)
                             {
                                int tmpNumbers = in_numbers.size();
                                int tmpMax = *max_element(in_numbers.begin(), in_numbers.end());
                                bool tmpNotDividable = false;
                            
                                while (true)
                                {
                                    for (int i = 0; i < tmpNumbers && tmpNotDividable == false; i++)
                                    {
                                        if (tmpMax % in_numbers[i] != 0 )
                                            tmpNotDividable = true;
                                    }
                            
                                    if (tmpNotDividable == false)
                                        return tmpMax;
                                    else
                                        tmpMax++;
                                }
                            }
                            

                            【讨论】:

                              【解决方案21】:

                              我会选择这个(C#):

                              static long LCM(long[] numbers)
                              {
                                  return numbers.Aggregate(lcm);
                              }
                              static long lcm(long a, long b)
                              {
                                  return Math.Abs(a * b) / GCD(a, b);
                              }
                              static long GCD(long a, long b)
                              {
                                  return b == 0 ? a : GCD(b, a % b);
                              }
                              

                              只是一些澄清,因为乍一看它并没有很清楚这段代码在做什么:

                              Aggregate 是一种 Linq 扩展方法,因此您不能忘记将 using System.Linq 添加到您的引用中。

                              Aggregate 获得一个累加函数,因此我们可以在 IEnumerable 上使用属性 lcm(a,b,c) = lcm(a,lcm(b,c))。 More on Aggregate

                              GCD 计算使用Euclidean algorithm

                              lcm 计算使用 Abs(a*b)/gcd(a,b) ,参考Reduction by the greatest common divisor

                              希望这会有所帮助,

                              【讨论】:

                                【解决方案22】:

                                在 R 中,我们可以使用 numbers 包中的 mGCD(x) 和 mLCM(x) 函数来计算最大的整数向量 x 中所有数字的公约数和最小公倍数:

                                    library(numbers)
                                    mGCD(c(4, 8, 12, 16, 20))
                                [1] 4
                                    mLCM(c(8,9,21))
                                [1] 504
                                    # Sequences
                                    mLCM(1:20)
                                [1] 232792560
                                

                                【讨论】:

                                  【解决方案23】:

                                  LCM 兼具结合性和交换性。

                                  LCM(a,b,c)=LCM(LCM(a,b),c)=LCM(a,LCM(b,c))

                                  这里是 C 中的示例代码:

                                  int main()
                                  {
                                    int a[20],i,n,result=1;  // assumption: count can't exceed 20
                                    printf("Enter number of numbers to calculate LCM(less than 20):");
                                    scanf("%d",&n);
                                    printf("Enter %d  numbers to calculate their LCM :",n);
                                    for(i=0;i<n;i++)
                                      scanf("%d",&a[i]);
                                   for(i=0;i<n;i++)
                                     result=lcm(result,a[i]);
                                   printf("LCM of given numbers = %d\n",result);
                                   return 0;
                                  }
                                  
                                  int lcm(int a,int b)
                                  {
                                    int gcd=gcd_two_numbers(a,b);
                                    return (a*b)/gcd;
                                  }
                                  
                                  int gcd_two_numbers(int a,int b)
                                  {
                                     int temp;
                                     if(a>b)
                                     {
                                       temp=a;
                                       a=b;
                                       b=temp;
                                     }
                                    if(b%a==0)
                                      return a;
                                    else
                                      return gcd_two_numbers(b%a,a);
                                  }
                                  

                                  【讨论】:

                                    【解决方案24】:

                                    我们有有效的实现of Least Common Multiple on Calculla,它适用于任意数量的输入,也显示步骤。

                                    我们所做的是:

                                    0: Assume we got inputs[] array, filled with integers. So, for example:
                                       inputsArray = [6, 15, 25, ...]
                                       lcm = 1
                                    
                                    1: Find minimal prime factor for each input.
                                       Minimal means for 6 it's 2, for 25 it's 5, for 34 it's 17
                                       minFactorsArray = []
                                    
                                    2: Find lowest from minFactors:
                                       minFactor = MIN(minFactorsArray)
                                    
                                    3: lcm *= minFactor
                                    
                                    4: Iterate minFactorsArray and if the factor for given input equals minFactor, then divide the input by it:
                                      for (inIdx in minFactorsArray)
                                        if minFactorsArray[inIdx] == minFactor
                                          inputsArray[inIdx] \= minFactor
                                    
                                    5: repeat steps 1-4 until there is nothing to factorize anymore. 
                                       So, until inputsArray contains only 1-s.
                                    

                                    就是这样 - 你得到了你的 lcm。

                                    【讨论】:

                                      【解决方案25】:

                                      使用 LINQ 你可以写:

                                      static int LCM(int[] numbers)
                                      {
                                          return numbers.Aggregate(LCM);
                                      }
                                      
                                      static int LCM(int a, int b)
                                      {
                                          return a * b / GCD(a, b);
                                      }
                                      

                                      应该添加using System.Linq; 并且不要忘记处理异常...

                                      【讨论】:

                                        【解决方案26】:

                                        这个怎么样?

                                        from operator import mul as MULTIPLY
                                        
                                        def factors(n):
                                            f = {} # a dict is necessary to create 'factor : exponent' pairs 
                                            divisor = 2
                                            while n > 1:
                                                while (divisor <= n):
                                                    if n % divisor == 0:
                                                        n /= divisor
                                                        f[divisor] = f.get(divisor, 0) + 1
                                                    else:
                                                        divisor += 1
                                            return f
                                        
                                        
                                        def mcm(numbers):
                                            #numbers is a list of numbers so not restricted to two items
                                            high_factors = {}
                                            for n in numbers:
                                                fn = factors(n)
                                                for (key, value) in fn.iteritems():
                                                    if high_factors.get(key, 0) < value: # if fact not in dict or < val
                                                        high_factors[key] = value
                                            return reduce (MULTIPLY, ((k ** v) for k, v in high_factors.items()))
                                        

                                        【讨论】:

                                          【解决方案27】:

                                          GCD 需要对负数进行一点修正:

                                          def gcd(x,y):
                                            while y:
                                              if y<0:
                                                x,y=-x,-y
                                              x,y=y,x % y
                                              return x
                                          
                                          def gcdl(*list):
                                            return reduce(gcd, *list)
                                          
                                          def lcm(x,y):
                                            return x*y / gcd(x,y)
                                          
                                          def lcml(*list):
                                            return reduce(lcm, *list)
                                          

                                          【讨论】:

                                            【解决方案28】:

                                            这是 Virgil Disgr4ce 实现的 C# 端口:

                                            public class MathUtils
                                            {
                                                /// <summary>
                                                /// Calculates the least common multiple of 2+ numbers.
                                                /// </summary>
                                                /// <remarks>
                                                /// Uses recursion based on lcm(a,b,c) = lcm(a,lcm(b,c)).
                                                /// Ported from http://stackoverflow.com/a/2641293/420175.
                                                /// </remarks>
                                                public static Int64 LCM(IList<Int64> numbers)
                                                {
                                                    if (numbers.Count < 2)
                                                        throw new ArgumentException("you must pass two or more numbers");
                                                    return LCM(numbers, 0);
                                                }
                                            
                                                public static Int64 LCM(params Int64[] numbers)
                                                {
                                                    return LCM((IList<Int64>)numbers);
                                                }
                                            
                                                private static Int64 LCM(IList<Int64> numbers, int i)
                                                {
                                                    // Recursively iterate through pairs of arguments
                                                    // i.e. lcm(args[0], lcm(args[1], lcm(args[2], args[3])))
                                            
                                                    if (i + 2 == numbers.Count)
                                                    {
                                                        return LCM(numbers[i], numbers[i+1]);
                                                    }
                                                    else
                                                    {
                                                        return LCM(numbers[i], LCM(numbers, i+1));
                                                    }
                                                }
                                            
                                                public static Int64 LCM(Int64 a, Int64 b)
                                                {
                                                    return (a * b / GCD(a, b));
                                                }
                                            
                                                /// <summary>
                                                /// Finds the greatest common denominator for 2 numbers.
                                                /// </summary>
                                                /// <remarks>
                                                /// Also from http://stackoverflow.com/a/2641293/420175.
                                                /// </remarks>
                                                public static Int64 GCD(Int64 a, Int64 b)
                                                {
                                                    // Euclidean algorithm
                                                    Int64 t;
                                                    while (b != 0)
                                                    {
                                                        t = b;
                                                        b = a % b;
                                                        a = t;
                                                    }
                                                    return a;
                                                }
                                            }'
                                            

                                            【讨论】:

                                              【解决方案29】:

                                              一些不需要 gcd 函数的 Python 代码:

                                              from sys import argv 
                                              
                                              def lcm(x,y):
                                                  tmp=x
                                                  while (tmp%y)!=0:
                                                      tmp+=x
                                                  return tmp
                                              
                                              def lcmm(*args):
                                                  return reduce(lcm,args)
                                              
                                              args=map(int,argv[1:])
                                              print lcmm(*args)
                                              

                                              这是它在终端中的样子:

                                              $ python lcm.py 10 15 17
                                              510
                                              

                                              【讨论】:

                                                【解决方案30】:

                                                你可以用另一种方式来做—— 假设有 n 个数字。取一对连续的数字并将其 lcm 保存在另一个数组中。在第一次迭代程序中执行此操作会进行 n/2 次迭代。然后接下来从 0 开始拾取对,例如 (0,1) , (2,3) 等等。计算它们的 LCM 并存储在另一个数组中。这样做直到你只剩下一个数组。 (如果 n 为奇数,则无法找到 lcm)

                                                【讨论】:

                                                  猜你喜欢
                                                  • 2011-05-12
                                                  • 1970-01-01
                                                  • 2020-07-11
                                                  • 1970-01-01
                                                  • 2021-07-16
                                                  • 2022-11-27
                                                  • 1970-01-01
                                                  • 2016-11-19
                                                  相关资源
                                                  最近更新 更多