[ 2023-03-11 ๐Ÿง™โ€โ™‚๏ธ TIL ]

Burkeyยท2023๋…„ 3์›” 11์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
56/157

๋ฐฑ์ค€ 9020๋ฒˆ

์ฝœ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก
๋ชจ๋“  ์ง์ˆ˜๋Š” ๋‘ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ถ”์ธก์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ํ•ด๋‹น ์ถ”์ธก์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ๊ณ„์† ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค.
(์•„๋ž˜๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ)

import sys

input = sys.stdin.readline

primes = {}

def isPrime(val):
    count = 0
    num = 2

    while num * num <= val:
        if (val % num) == 0:
            count += 1
        num += 1

    if count == 0:
        return True
    else:
        return False

t = int(input())
input_arr = []
primes = {}
max_val = 0

for val in range(2, 10000):
    if isPrime(val):
        primes[val] = val

sosu = primes.keys()

for _ in range(t):
    check = True
    n = int(input())
    a = 0
    b = val
    for num1 in sosu:
        if num1 > (n // 2):
            break
        if num1 in primes:
            for num2 in sosu:
                if (num2 in primes) and (num1 + num2 == n):
                    if abs(num1 - num2) < abs(a-b):
                        a = num1
                        b = num2
    print(a, b)

๋ฏธ๋ฆฌ ์ œ๊ณต๋˜๋Š” ์ˆ˜๊นŒ์ง€์˜ ๋ฒ”์œ„์˜ ์†Œ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ํ’€์ด์˜€์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ์˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ๊ตญ ๊ตฌ๊ธ€๋งํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์ฝ”๋“œ)

import sys


def isPrime(val):
    count = 0
    num = 2

    while num * num <= val:
        if (val % num) == 0:
            count += 1
        num += 1

    if count == 0:
        return True
    else:
        return False


input = sys.stdin.readline

n = int(input())

for _ in range(n):
    num = int(input())
    half = left = num//2 # ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ์ˆ˜์˜ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ”

    for right in range(half, num): 
    # ์ค‘๊ฐ„๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด ๋‘ ์ˆ˜์ฐจ๊ฐ€ ์ œ์ผ ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ์†Œ์ˆ˜๋ฅผ ์ฐพ๊ธฐ์‹œ์ž‘ํ•œ๋‹ค.
        if isPrime(left) and isPrime(right):
            print(left, right)
            break
        left -= 1
profile
์Šคํƒฏ ์˜ฌ๋ฆฌ๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€