ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

6588번: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘

문제 1742λ…„, λ…μΌμ˜ μ•„λ§ˆμΆ”μ–΄ μˆ˜ν•™κ°€ ν¬λ¦¬μŠ€ν‹°μ•ˆ κ³¨λ“œλ°”νλŠ” λ ˆμ˜¨ν•˜λ₯΄νŠΈ μ˜€μΌλŸ¬μ—κ²Œ λ‹€μŒκ³Ό 같은 좔츑을 μ œμ•ˆν•˜λŠ” νŽΈμ§€λ₯Ό λ³΄λƒˆλ‹€. 4보닀 큰 λͺ¨λ“  μ§μˆ˜λŠ” 두 ν™€μˆ˜ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

www.acmicpc.net

 

문제 풀이

 4 보닀 큰 λͺ¨λ“  μ§μˆ˜λŠ” 두 ν™€μˆ˜ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ”κ²ƒμ΄ ν¬λ¦¬μŠ€ν‹°μ•ˆ κ³¨λ“œλ°”νμ˜ 좔츑이닀. λ¬Έμ œλŠ” λ‹€μŒκ³Ό 같은 μˆœμ„œμ— 따라 ν’€ 수 μžˆλ‹€.

 

  1. μ΅œλŒ€ μž…λ ₯λ˜λŠ” μˆ˜λŠ” 100000μ΄λ―€λ‘œ, μ΅œλŒ€ μž…λ ₯ 수 κΉŒμ§€μ˜ μ†Œμˆ˜λ₯Ό 미리 κ³„μ‚°ν•œλ‹€.
  2. μ›λž˜μˆ˜ - ν™€μˆ˜μΈ μ†Œμˆ˜ = ν™€μˆ˜ μ΄λ―€λ‘œ, κ°€μž₯ μž‘μ€ ν™€μˆ˜μΈ μ†Œμˆ˜ λΆ€ν„° μ›λž˜ 수 - ν™€μˆ˜μΈ μ†Œμˆ˜ λͺ¨λ‘ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λ©΄ λœλ‹€.
    • 예λ₯Ό λ“€μ–΄ 8인 경우 κ°€μž₯ μž‘μ€ ν™€μˆ˜μΈ μ†Œμˆ˜μΈ 3을 톡해 κ³„μ‚°ν•œ 값은, 5(8 - 3)μ΄λ―€λ‘œ λ‘˜ λ‹€ μ†Œμˆ˜μ—¬μ„œ 쑰건에 λ§Œμ‘±ν•œλ‹€.
    • 이와 달리 42인 κ²½μš°λŠ” 3, 39(42 - 3)은 λ§Œμ‘±ν•˜μ§€ μ•Šκ³  κ·Έλ‹€μŒ ν™€μˆ˜μΈ μ†Œμˆ˜κ°€ 5μ΄λ―€λ‘œ 5, 37(42 -5)κ°€ 쑰건을 λ§Œμ‘±ν•˜μ—¬ 정닡이 λœλ‹€.
    • 좜λ ₯은 두 수의 μ°¨κ°€ κ°€μž₯ 큰 것을 좜λ ₯ν•˜λ―€λ‘œ κ°€μž₯ μž‘μ€ ν™€μˆ˜μΈ 3λΆ€ν„° μ¦κ°€ν•˜μ—¬ 닡을 찾으면 λœλ‹€.
      • μ΅œλŒ€ 수인 100000이 μž…λ ₯λœλ‹€κ³  ν•˜μ—¬λ„ 11 + 99989둜 정닡을 λ§Œμ‘±ν•˜λ―€λ‘œ, μ΅œμ΄ˆμ— μ†Œμˆ˜λ₯Ό 미리 κ³„μ‚°ν•˜λŠ” μ‹œκ°„μ„ μ œμ™Έν•œλ‹€λ©΄ λ‚˜λ¨Έμ§€λŠ” κ²½λ―Έν•  것이닀.
  3. νŒŒμ΄μ¬μ—μ„œλŠ” `input`이 반볡될 경우 μ‹œκ°„μ΄ μ˜€λž˜κ±Έλ¦¬λ―€λ‘œ, `sys.stdin.readline`을 μ‚¬μš©ν•œλ‹€.

 

μ½”λ“œ

from sys import stdin


def is_prime(n):
    nums = [True] * n
    for i in range(2, int(n ** 0.5) + 1):
        if nums[i]:
            for j in range(i + i, n, i):
                nums[j] = False
    return nums

if __name__ == '__main__':
    nums = is_prime(1000000)
    while True:
        n = int(stdin.readline())
        if not n:
            break
        for i in range(3, n // 2 + 1):
            if nums[i] and nums[n - i]:
                print("{} = {} + {}".format(n, i, n - i))
                break

 λ―Έλ¦¬ μ†Œμˆ˜λ₯Ό 체크해 두어 μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©°, `input`을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  `sys.stdin.readline`을 μ‚¬μš©ν•˜μ—¬ μ‹œκ°„μ€ 320msκ°€ κ±Έλ¦°λ‹€.

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€