import sys
input = sys.stdin.readline
a,b = map(int, input().split())
g = 0
for i in range(2,min(a,b)):
if a%i==0 and b%i==0:
g = i
print(g)
일반적으로 생각할 수 있는 위의 방법의 시간복잡도는
O(N)
이다
a를 b로 나눈 나머지를 r이라고 했을 때, GCD(a,b) = GCD(b,r) 과 같다
r이 0이면 그 때의 b가 최대 공약수이다
GCD(24, 16) = GCD(16, 8) = GCD(8, 0) = 8
# 유클리드 호제법을 이용한 최대공약수 구하기
def gcd(a,b):
if b == 0:
return a
else:
return gcd(b, a%b)
N이 소수가 되려면, 2보다 크거나 같고 루트N 보다 작거나 같은 자연수로 나누어 떨어지면 안된다
import math
def prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n%i == 0:
return False
return True
2부터 루트N 까지 반복문을 돌면서 N을 나눌 수 없을 때까지 나눈다
import math
for i in range(2, int(math.sqrt(n))+1):
while n%i == 0:
print(i)
n /= i
if n>1:
print(n)