답변:
그것은의 표준 라이브러리에 .
>>> from fractions import gcd
>>> gcd(20,8)
4
inspectPython 2.7 모듈의 소스 코드 :
>>> print inspect.getsource(gcd)
def gcd(a, b):
"""Calculate the Greatest Common Divisor of a and b.
Unless b==0, the result will have the same sign as b (so that when
b is divided by it, the result comes out positive).
"""
while b:
a, b = b, a%b
return a
파이썬 3.5으로 gcd 에 math모듈 ; 의 하나 fractions는 더 이상 사용되지 않습니다. 또한 inspect.getsource더 이상 두 방법에 대한 설명 소스 코드를 반환하지 않습니다.
fractions.gcd(1, -1)이다 -1하지만 1 > -1즉, 1분할 모두 1와 -1이보다 큰없이 나머지와 -1참조 bugs.python.org/issue22477
gcd(1, -1) == -1 것입니다 " , 따라서 나에게 완전히 합법적 인 것 같습니다.
fractions.gcd()합니다 (유클리드 링 요소에서 작동합니다).
math.gcd(1, -1)는 1.
mn이있는 알고리즘은 매우 오래 실행될 수 있습니다.
이것은 훨씬 더 잘 수행됩니다.
def gcd(x, y):
while y != 0:
(x, y) = (y, x % y)
return x
x되기 전에 사용합니다 . 당신은 할당 y에 x 처음 그래서 지금, y로 설정 될 것입니다 0(같은 y % y항상 0입니다).
이 버전의 코드는 GCD를 찾기 위해 Euclid의 알고리즘을 사용합니다.
def gcd_recursive(a, b):
if b == 0:
return a
else:
return gcd_recursive(b, a % b)
def gcd(a, b): if b == 0: return a return gcd(b, a % b)
def gcd(m,n):
return gcd(abs(m-n), min(m, n)) if (m-n) else n
재귀 사용 ,
def gcd(a,b):
return a if not b else gcd(b, a%b)
while 사용 ,
def gcd(a,b):
while b:
a,b = b, a%b
return a
람다를 사용하여
gcd = lambda a,b : a if not b else gcd(b, a%b)
>>> gcd(10,20)
>>> 10
a=int(raw_input('1st no \n'))
b=int(raw_input('2nd no \n'))
def gcd(m,n):
z=abs(m-n)
if (m-n)==0:
return n
else:
return gcd(z,min(m,n))
print gcd(a,b)
유클리드의 알고리즘을 기반으로 한 다른 접근 방식입니다.
def gcd(a,b):
if b > a:
return gcd(b,a)
r = a%b
if r == 0:
return b
return gcd(r,b)
a>b:def gcd(a, b):
if(a<b):
a,b=b,a
while(b!=0):
r,b=b,a%r
a=r
return a
a>b또는 a<b:def gcd(a, b):
t = min(a, b)
# Keep looping until t divides both a & b evenly
while a % t != 0 or b % t != 0:
t -= 1
return t
b, a = a, b입니다. 언어에 대해 더 읽어보세요
나는 while 루프를 사용하여 숙제를 위해 이와 같은 것을해야했다. 가장 효율적인 방법은 아니지만 함수를 사용하지 않으려면 다음과 같이 작동합니다.
num1 = 20
num1_list = []
num2 = 40
num2_list = []
x = 1
y = 1
while x <= num1:
if num1 % x == 0:
num1_list.append(x)
x += 1
while y <= num2:
if num2 % y == 0:
num2_list.append(y)
y += 1
xy = list(set(num1_list).intersection(num2_list))
print(xy[-1])
numbers = [];
count = input ("HOW MANY NUMBERS YOU WANT TO CALCULATE GCD?\n")
for i in range(0, count):
number = input("ENTER THE NUMBER : \n")
numbers.append(number)
numbers_sorted = sorted(numbers)
print 'NUMBERS SORTED IN INCREASING ORDER\n',numbers_sorted
gcd = numbers_sorted[0]
for i in range(1, count):
divisor = gcd
dividend = numbers_sorted[i]
remainder = dividend % divisor
if remainder == 0 :
gcd = divisor
else :
while not remainder == 0 :
dividend_one = divisor
divisor_one = remainder
remainder = dividend_one % divisor_one
gcd = divisor_one
print 'GCD OF ' ,count,'NUMBERS IS \n', gcd
가치 교환이 저에게 잘 맞지 않았습니다. 그래서 a <b OR a> b에 입력 된 숫자에 대해 거울과 같은 상황을 설정했습니다.
def gcd(a, b):
if a > b:
r = a % b
if r == 0:
return b
else:
return gcd(b, r)
if a < b:
r = b % a
if r == 0:
return a
else:
return gcd(a, r)
print gcd(18, 2)
#This program will find the hcf of a given list of numbers.
A = [65, 20, 100, 85, 125] #creates and initializes the list of numbers
def greatest_common_divisor(_A):
iterator = 1
factor = 1
a_length = len(_A)
smallest = 99999
#get the smallest number
for number in _A: #iterate through array
if number < smallest: #if current not the smallest number
smallest = number #set to highest
while iterator <= smallest: #iterate from 1 ... smallest number
for index in range(0, a_length): #loop through array
if _A[index] % iterator != 0: #if the element is not equally divisible by 0
break #stop and go to next element
if index == (a_length - 1): #if we reach the last element of array
factor = iterator #it means that all of them are divisibe by 0
iterator += 1 #let's increment to check if array divisible by next iterator
#print the factor
print factor
print "The highest common factor of: ",
for element in A:
print element,
print " is: ",
최대 _ 공통 _ 약자 (A)
def gcdIter(a, b):
gcd= min (a,b)
for i in range(0,min(a,b)):
if (a%gcd==0 and b%gcd==0):
return gcd
break
gcd-=1
break진술이 무엇 을 성취하려고 하는지조차 확신하지 못한다 .
다음은 개념을 구현하는 솔루션입니다 Iteration.
def gcdIter(a, b):
'''
a, b: positive integers
returns: a positive integer, the greatest common divisor of a & b.
'''
if a > b:
result = b
result = a
if result == 1:
return 1
while result > 0:
if a % result == 0 and b % result == 0:
return result
result -= 1