데이터분석/셋째주

기초수학 : 최대공약수

핑크댕댕이 2023. 10. 19. 04:47
728x90

 

공약수

두 개 이상의 수에서 공통된 약수를 공약수라고 한다.

12의 약수 → 1, 2, 3, 4, 6, 12
20의 약수 → 1, 2, 4, 5, 10, 20
공약수 →   1   2   4   

 

 

 

최대공약수

공약수 중 가장 큰수를 최대공약수라고 한다.

12의 약수 → 1, 2, 3, 4, 6, 12
20의 약수 → 1, 2, 4, 5, 10, 20
●공약수 →   1   2   4   
최대공약수 →   4   

 

 

소인수분해를 이용하면, 최대 공약수 및 공약수를 구할수 있다.

( 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것 )

12의 소인수분해 : 2 × 6  → 2 × 2 × 3  → 
2^2 × 3
20의 소인수분해 : 2 × 10  → 2 × 2 × 5  →  2^2 × 5
  최대 공약수 : 


 공통인 소인수의 거듭제곱에서 지수가 작은 수를 모두 곱한다.  

2^2  →    4   
  공약수 : 


 최대공약수의 약수 

  1   2   4    

 

14의 소인수분해 : 2 × 7
2 × 7
20의 소인수분해 : 2 × 10  → 2 × 2 × 5  →  2^2 × 5
  최대 공약수 : 


 공통인 소인수의 거듭제곱에서 지수가 작은 수를 모두 곱한다.  

  
  공약수 : 


 최대공약수의 약수 

  1    2  

 

36의 소인수분해 : 2 × 18  → 2 × 2 × 9 
2 × 2 × 3 × 3  → 

2^2 × 3^2
60의 소인수분해 : 2 × 30  → 2 × 2 × 15  
2 × 2 × 3 × 5  → 
2^2 × 3 × 5
  최대 공약수 : 


 공통인 소인수의 거듭제곱에서 지수가 작은 수를 모두 곱한다.  

2^2 , 3  → 2^2 × 3  →    12    
  공약수 : 


 최대공약수의 약수 

  1    2       6  ,   12      

 

 

 

소수로 나눗셈을 하면, 좀 더 편리하게 최대공약수를 구할 수 있다.

두개 이상의 수를 소인수로 더이상 나누어지지 않을 때까지 나눈다.

12와 20의 최대공약수 36와 60의 최대공약수
  2   │  12  ,  20
       └───────
  2   │    6  ,  10
       └───────
  ↓          3  ,    5


  2   │  36  ,  60
       └───────
  2   │  18  ,  30
       └───────
  3   │    9  ,  15
       └───────
  ↓          3  ,    5
  2  ×  2   =   4
최대공약수 :   4    
  2  ×  2  ×  3   =   12
최대공약수 :   12    
공약수 (최대공약수의 약수)
  1    2    4   
공약수 (최대공약수의 약수)
  1    2          6  ,   12      

 

 

 

[실습]

다음 수의 최대 공약수 및 공약수를 구해보자

  • 12, 54, 72 의 최대공약수 및 공약수
  • 25, 115, 255 의 최대공약수 및 공약수
12와 54, 72의 최대공약수 25와 115, 255의 최대공약수
  2   │  12  ,  54  ,  72
       └──────────
  3   │    6  ,  27  ,  36
       └──────────
  ↓          2  ,    9   ,  12
  5   │  25  ,  115  ,  255
       └──────────
  ↓          5  ,    23  ,    51

  2  ×  3   =   6
최대공약수 :   6    
  5
최대공약수 :   5    
공약수 (최대공약수의 약수)
  1    2    3    6   
공약수 (최대공약수의 약수)
  1    

 

 

[실습]

빵 112개와 우유 80개를 학생들한테 남김없이 동일하게 나누어 주려고 할때, 최대 몇 명의 학생이 빵과 우유를 받을 수 있는지 계산해보자.

그리고 학생 한 명이 받게 되는 빵과 우유의 개수를 계산해보자.

 

  • 112와 80의 최대공약수
  • 학생 한 명이 받게 되는 빵과 우유 개수
112와 80의 최대공약수
  2   │  112  ,  80
       └───────
  2   │   56  ,  40
       └───────
  2   │   28  ,  20
       └───────
  2   │   14  ,  10
       └───────
  ↓          7  ,    5
  2  ×  2   ×  2   ×  2   =   16
최대공약수 :   16    
학생 한 명이 받게 되는 빵과 우유
112 / 16 = 7
80 / 16 = 5
빵 7개, 우유 5개

 

 

 

유클리드 호제법을 이용해서 최대공약수를 구할 수 있다.

   x, y의 최대공약수는 y, r(x%y)의 최대공약수와 같다.   

 

x, y 의 최대공약수 = y, (x/y) 의 최대공약수

x   y   r  
12 % 36 = 12
     
36 % 12 = 3  나머지가 0일 때까지 나눗셈한다. 
     
12 % 3 = 0  
 
최대공약수
 

 

 

 

파이썬 이용

for 문과 유클리드 호제법을 이용해서 최대 공약수를 구하자.

 

[실습] 두개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성하자.

#전제조건: num2는 num1보다 큰 정수를 입력한다.

num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))
maxNum = 0

for i in range(1, (num1 + 1)):
	if num1 % i == 0 and num2 % i == 0:	#공약수
		print(f'공약수: {i}')
        maxNum = i

print(f'최대공약수: {maxNum}')

 

 

[실습] 세개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드를 작성하자.

#전제조건: num2는 num1보다 큰 정수를 입력한다.

num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))
num3 = int(input('1보다 큰 정수 입력: '))
maxNum = 0

for i in range(1, (num1 + 1)):
	if num1 % i == 0 and num2 % i == 0 and num3 % i == 0:	#공약수
		print(f'공약수: {i}')
		maxNum = i

print(f'최대공약수: {maxNum}')

 

 

[실습] 유클리드 호제법을 이용해서 최대공약수를 구할 수 있다.

#전제조건: num2는 num1보다 큰 정수를 입력한다.

num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))

temp1 = num1; temp2 = num2

while temp2 > 0:
	temp = temp2
	temp2 = temp1 % temp2
	temp1 = temp

print(f'{num1}, {num2}의 최대공약수: {temp1}')

for n in range(1, (temp1 + 1):
	if temp1 % n == 0:
		print(f'{num1}, {num2}의 공약수: {n}')

 

 

 

 

 

반응형