2017-02-28 15 views
-1

이것은 지금까지 제 코드입니다.LCM 및 GCD 3 - 파이썬

from math import gcd 

#3 digit lcm calculation 
h=input("(1) 2 Digit LCM Or \n(2) 3 Digit LCM\n :") 
if h == "2": 
    while True: 
     def lcm(x, y, z): 
      a = gcd(x, y, z) 
      num = x 
      num2 = y * z // a 
      LCM = num * num2 // a 

      return LCM 

     x = int(input("Number 1: ")) 
     y = int(input("Number 2: ")) 
     z = int(input("Number 3: ")) 
     print("The LCM Of " + str(x) + " And " + str(y) + " And " + str(z) +   " Is " + str(lcm(x, y, z))) 

if h == "1": 
    while True: 
     def lcm(x, y): 
      a = gcd(x, y) 
      num = x 
      num2 = y 
      LCM = num * num2 // a 

      return LCM 
     x = int(input("Number 1: ")) 
     y = int(input("Number 2: ")) 
     print("The LCM Of " + str(x) + " And " + str(y) + " Is " + str(lcm(x, y))) 

내 문제는 3 자리가 바로 발견 한 것입니다 공통의 배수가 아닌 가장 낮은 등 10, 5, 8 대신에 어떤 도움이 유용 할 것이다 가능한 40 400을 만드는!


새로운 코드 덕분에

from math import gcd 

#3 digit lcm calculation 
h=input("(1) 2 Digit LCM Or \n(2) 3 Digit LCM\n :") 
if h == "2": 
    while True: 
     def lcm(x, y, z): 
      gcd2 = gcd(y, z) 
      gcd3 = gcd(x, gcd2) 

      lcm2 = y*z // gcd2 
      lcm3 = x*lcm2 // gcd(x, lcm2) 
      return lcm3 

     x = int(input("Number 1: ")) 
     y = int(input("Number 2: ")) 
     z = int(input("Number 3: ")) 
     print("The LCM Of " + str(x) + " And " + str(y) + " And " + str(z) + " Is " + str(lcm(x, y, z))) 

한가지를 자두 맛하려면 대신 라인 각각의 모든 전에 4 공백을 추가 할 필요없이 코드를 표시하는 또 다른 방법이있다.

X * Y = GCD (X, Y) * LCM (: 감사

+5

이것은 실제 코드가 아니거나 오류를 언급하지 않았습니다. 'math.gcd'는 두 개의 인수만을 취하므로'a = gcd (x, y, z)'는'TypeError'로 죽습니다. 어쨌든 당신은 문제를 지나치게 복잡하게 만듭니다. 두 개의 숫자 LCM 함수를 작성하면 [ 'n 개의 숫자 LCM 함수를 쉽게 구현할 수 있습니다] (http://stackoverflow.com/q/147515/364696). – ShadowRanger

+0

... 그리고 그 오류로 죽는다. – Prune

답변

1

분석은

당신은 정수의 쌍을 위해 보유하고있는 관계를 바로 발견 (하지만 아직 실현) 것처럼 x, y)

않습니다 트리플에 대한 보유. 프라임 인수 분해의 기본 논리는 GCD가 각 소수 요소에 대해 최소 지수를 취한다는 것입니다. LCD는 최대 지수를 취합니다. 단지 두 개의 정수 만 있으면 이것은 각 지수가 정확히 한 번 사용되어 위의 방정식을 유지할 수 있음을 의미합니다.

그러나 3 개의 정수를 사용하면 각 소수 요소의 중간 지수가 LCM 및 GCD 계산에서 모두 제외됩니다.

10 = 2^1 * 3^0 * 5^1 
    8 = 2^3 * 3^0 * 5^0 
    5 = 2^0 * 3^0 * 5^1 
---------------------- 
GCD = 2^0 * 3^0 * 5^0 
LCM = 2^3 * 3^0 * 5^1 

참고 제외 인자 : 2^1 * 3^0 *하여 LCM 계산 10.


배 정도 높은 이유 5^1 = 10,

,432 : 솔루션

당신은 세 번째 정수, 같은 것을 사용하면 논리를 분할해야 10

+0

정답에 하나 더하기! 고맙습니다 – Bilbo