2609

num = input()
a, b = num.split()
a = int(a)
b = int(b)

# 유클리드 호제법
def gcd(a,b):
    if (a>1 and b>1):
        num = max(a,b)
        div = min(a,b)
        while(num%div != 0):
            re = num%div
            num = div
            div = re
    else:
        div = min(a,b)
    return div

# 최대공약수
c = gcd(a,b)
print(c)
# 최소공배수 찾기
print(a*b//c)

이건 최대공약수 최소공배수 구하는 것

마지막에 print(ab/c)는 틀렸는데 print(ab//c)는 맞아서 신기햄

6588

# 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.

# step 1) 4보다 큰 짝수 입력 받기
a = int(input())

# 2) 에라토스테네스의 체로 소수 구하기: https://wikidocs.net/21638
n=a
ary = [False,False] + [True]*(n-1)
primes=[]

for i in range(2,n+1):
    if ary[i] and ary[i]%2 ==1 : primes.append(i)
    for j in range(2*i, n+1, i):
        ary[j] = False

# 3) 1을 두 홀수 소수로 나타내기
is_true = False
for i in range(len(primes)):
    if a-primes[i] in primes:
        print(str(a)+ " = " + str(primes[i]) + " + " + str(a-primes[i]))
        is_true = True
        break
if is_true==False : print("Goldbach's conjecture is wrong.")

에라토스테네스의 체를 처음 만든 사람은 진짜 천재 아닐까..?

근데 저게 틀려서 다른 코드랑 비교해봤당,,, 아니 왜 틀린거지

def getPrimaryNum_Eratos(N):
    nums = [True] * (N + 1)
    for i in range(2, len(nums) // 2 + 1):
        if nums[i] == True:
            for j in range(i+i, N, i):
                nums[j] = False
    return [[i for i in range(2, N) if nums[i] == True], nums]

primary_nums = getPrimaryNum_Eratos(1000000)[0]
primary_bools = getPrimaryNum_Eratos(1000000)[1]

while(True):
    N = int(input())
    if N == 0: break
    for i in range(N // 2):
        if primary_bools[N-primary_nums[i]] == True:
            print("{} = {} + {}".format(N, primary_nums[i], N-primary_nums[i])) break

#출처: https://somjang.tistory.com/entry/BaeKJoon-6588번-골드바흐의-추측-문제-풀이 [솜씨좋은장씨]

그러다가 잘못된 점을 깨달았는데,

입력은 하나 또는 그 이상의 테스트 케이스로 이루어져 있다. 테스트 케이스의 개수는 100,000개를 넘지 않는다. 입력의 마지막 줄에는 0이 하나 주어진다. 를 고려하지 않아서 그렇당 히히,,,,

# 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.

# 1) 에라토스테네스의 체로 소수 구하기
n=1000000
ary = [False,False] + [True]*(n-1)
primes=[]

for i in range(2,n+1):
    if ary[i] and ary[i]%2 ==1 : primes.append(i)
    for j in range(2*i, n+1, i):
        ary[j] = False

# 2) 수를 입력받기
while(True):
    a = int(input())
    #is_true = False
    if a==0: break
    elif (a>4 and a%2 == 0):
        count = 0
        for i in range(len(primes)):
            if a-primes[i] in primes:
                print("{} = {} + {}".format(a, primes[i], a-primes[i]))
                count += 1
            if count>0: break
        if count == 0: print("Goldbach's conjecture is wrong.")

그래서 이번엔 이렇게 했더니 시간 초과가 뜨더라고,,, 허허