6588 Python 골λλ°νμ μΆμΈ‘ λͺ¨λ μμ΄
λ¬Έμ
import math
import sys
# ν
μ€νΈ μΌμ΄μ€ κ°―μ
maxValue = 1000000
lists = [True] * (maxValue + 1)
lists[0] = lists[1] = False
# μλΌν μ€ν
λ€μ€μ 체
for i in range(2, int(math.sqrt(maxValue) + 1)):
if lists[i]:
# 1. μκ° μ΄κ³Ό λμ μΆκ°ν λ΄μ© => ν λ² νμΈν λ΄μ©μ λ€μ νμΈνμ§ μμλλ¨ μλλ©΄ κ°μ μΌμ λ°λ³΅νλ κ²μ΄κΈ° λλ¬Έ
# 2. λ€μκ³Ό κ°μ κ²½μ°λ‘ μ¬μ©μ νλ©΄ μλ μ½λλ³΄λ€ μκ°μ΄ μ€λκ±Έλ¦Ό
# while i * j <= maxValue:
# lists[i * j] = False
# # μ§μ λ° μμκ° μλλ©΄ λ€ False
# j += 1
for j in range(i * i, maxValue + 1, i):
lists[j] = False # 3. λ°°μμ λͺ¨λ κ°λ€μ False λ‘ λ³κ²½ i*(i+i)
while True:
n = int(sys.stdin.readline())
# 0 μ΄λ©΄ break
if n == 0:
break
check = False
# κ³μ° λ‘μ§
for i in range(3, n, 2):
# λ¬Έμ ν΄κ²° => 3~nκΉμ§ +1μ© νμΈνμ§ μκ³ +2μ© νμΈν¨.
if lists[i] and lists[n - i]:
print(str(n) + " = " + str(i) + " + " + str(n - i))
check = True
break
# λ νμ μμμ ν©μΌλ‘ λνλΌ μ μλ κ²½μ°
if not check:
print("Goldbach's conjecture is wrong.")
ν΄κ²° κ³Όμ
1. if μ½λλ₯Ό μΆκ°νμ¬ ν λ² νμΈν κ°μ λ€μ νμΈνμ§ μλλ‘ => λͺ νν λ¬Έμ ν΄κ²°μ μλμμ§λ§, νμν λΆλΆμ΄μμ.
2. whileλ¬Έμ ν΅ν΄ μλΌν μ€ν λ€μ€ μ²΄λ‘ μμλ₯Ό ꡬνλ©΄ for λ¬Έμ μ¬μ©νλ κ²λ³΄λ€ μκ°μ΄ μ€λκ±Έλ¦°λ€λ λΈλ‘κ·Έλ₯Ό μ°Έμ‘° ! => λκ°μ μκ° μ΄κ³Ό μλ¬ !
3. λ§μ§λ§μΌλ‘ κ³μ°λ‘μ§μμ nμ 1μ λνμ¬ νλνλ νμΈνλ κ²μμ μ§μλ νμΈνμ§ μκ³ νμλ§ νμΈνκΈ° μν΄ 2μ λνμ¬ μ λ°μΌλ‘ κ°μ μ€μ¬ μ§ννλ μκ° μ΄κ³Ό μλ¬ ν΄κ²° μ±κ³΅ !
λ¬Έμ νμ΄
λ§μ μνμ°©μ€κ° μμμ§λ§, μμ μ½λ νλκ° μκ°μ΄κ³Ό λ¬Έμ κ° λ μ μμ΄ μ¬μΈνκ² μ κ·Όν΄μΌνλ€λ κ²μ λμκΈ°κ² λμλ€.