์ƒˆ์†Œ์‹

๐Ÿงฎ PS

๋ฐฑ์ค€ (boj) ํŒŒ์ด์ฌ - 6588๋ฒˆ : ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก

  • -

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/6588

 

6588๋ฒˆ: ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก

๋ฌธ์ œ 1742๋…„, ๋…์ผ์˜ ์•„๋งˆ์ถ”์–ด ์ˆ˜ํ•™๊ฐ€ ํฌ๋ฆฌ์Šคํ‹ฐ์•ˆ ๊ณจ๋“œ๋ฐ”ํ๋Š” ๋ ˆ์˜จํ•˜๋ฅดํŠธ ์˜ค์ผ๋Ÿฌ์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”์ธก์„ ์ œ์•ˆํ•˜๋Š” ํŽธ์ง€๋ฅผ ๋ณด๋ƒˆ๋‹ค. 4๋ณด๋‹ค ํฐ ๋ชจ๋“  ์ง์ˆ˜๋Š” ๋‘ ํ™€์ˆ˜ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 8์€ 3 + 5๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , 3๊ณผ 5๋Š” ๋ชจ๋‘ ํ™€์ˆ˜์ธ ์†Œ์ˆ˜์ด๋‹ค. ๋˜, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 ์ด๋‹ค. ์ด ์ถ”์ธก์€ ์•„์ง๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ์ด๋‹ค. ๋ฐฑ๋งŒ ์ดํ•˜์˜ ๋ชจ

www.acmicpc.net


 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด : https://infinitt.tistory.com/232?category=1105010

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ (1) - ์ˆ˜ํ•™ : ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• , ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด (๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ, ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜, ์†Œ์ˆ˜)

์ˆ˜ํ•™๊ณผ ๊ด€๋ จํ•œ ๊ธฐ์ดˆ๋ฌธ์ œ์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ ์†Œ์ˆ˜ (prime number) 1. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ (Modular Arithmetic) Python ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๋ฉด ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ, C++ , Ja..

infinitt.tistory.com

 

 

 

 

์ฒ˜์Œ์—๋Š” ๋จธ๋ฆฟ์†์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ํŽธํ•˜๋„๋ก, ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ, ์ง์ ‘ ์†Œ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” List๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

์ด List๋ฅผ ํ†ตํ•ด, if (์ž…๋ ฅ๋ฐ›์•„์˜จ๊ฒƒ - List[0]) in List

์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ฆ์„ ํ–ˆ๋”๋‹ˆ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์‚ฌ์‹ค ์†Œ์ˆ˜๋ฅผ ์ง์ ‘ list์— ๋‹ด์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†์—ˆ๊ณ , ๋ง‰์ƒ ๊ตฌ

ํ˜„ํ•ด๋ณด๋‹ˆ  check์— ๋“ค์–ด์žˆ๋Š” False True ๊ฐ’์œผ๋กœ๋„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •๋„ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.

 

 

 

ํŒŒ์ด์ฌ ์ฝ”๋“œ
r= 1000000

check = [True for _ in range(r)]

for i in range(2,int(r**0.6)):
    if check[i]==True:
        for j in range(i*2, r, i) : 
            if check[j] == True :
                check[j] = False            #์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด


import sys
input = sys.stdin.readline


while(True):                               #์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๊ฐ€ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์— ์†ํ•˜๋Š”์ง€, ์ฆ‰ ์†Œ์ˆ˜์ธ์ง€
    n = int(input())

    if n==0 : break
    for i in range(3,r):
        if check[i] == True:
            if check[n-i] == True :
                print("%d = %d + %d"%(n , i , n-i))
                break
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.