[ํŒŒ์ด์ฌ/python] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

2021. 3. 10. 16:52

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ๊ณ ๋Œ€ ๊ทธ๋ฆฌ์Šค ์ˆ˜ํ•™์ž์ธ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค๊ฐ€ ๊ณ ์•ˆํ•ด ๋‚ธ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋งˆ์น˜ ์ฒด๋กœ ๊ฑธ๋Ÿฌ๋‚ด๋“ฏ์ด ์ˆ˜๋ฅผ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค๊ณ  ํ•˜์—ฌ ๋ถ™์—ฌ์ง„ ์ด๋ฆ„์ด๋‹ค.

์ž„์˜์˜ ์ž์—ฐ์ˆ˜ n์— ๋Œ€ํ•ด ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์†Œ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์›๋ฆฌ๋Š” 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์›Œ๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ 

๋‹ค์Œ์œผ๋กœ ์˜ค๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์ˆ˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ทธ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ ์ง€์›Œ๋‚˜๊ฐ„๋‹ค.

๊ทธ ํ›„ ๋‚จ์€ ์ˆซ์ž๋“ค์ด ์†Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ์ด ๊ณผ์ •์„ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ• ์ง€ ์ •ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ

๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด๋„ ๊ฐ€๋Šฅ์€ ํ•˜๊ฒ ์ง€๋งŒ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

์ตœ์†Œ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๊ณฑ๊ทผ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด ๋ฌธ์ œ์—์„œ ์ œ๊ณฑ๊ทผ์ด ์“ฐ์ด๋Š” ์ด์œ ๋ฅผ ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์•˜๋‹ค.

์–ด๋–ค ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ์ด๋ž€ ์ œ๊ณฑํ•˜์—ฌ ๊ทธ ์ˆ˜๊ฐ€ ๋˜๋Š” ์ˆ˜๋กœ, ์˜ˆ๋ฅผ ๋“ค์–ด 9์˜ ์ œ๊ณฑ๊ทผ์€ 3์ด๋‹ค.

์–ด๋–ค ์ˆ˜์˜ ์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ์ œ๊ณฑ๊ทผ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ˆ˜๋Š” ์ง์„ ์ด๋ฃจ์–ด ๊ทธ ์–ด๋–ค ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 36์˜ ์•ฝ์ˆ˜๋Š” 1, 2, 3, 4, 6, 9, 12, 18, 36์ด๊ณ  36์˜ ์ œ๊ณฑ๊ทผ์€ 6์ด๋‹ค.

 

์ œ๊ณฑ๊ทผ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆซ์ž๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ˆ˜์™€ ์ง์„ ์ด๋ฃจ๊ณ  ์žˆ๋‹ค.

์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ˆ˜๋Š” ์™ผ์ชฝ์— ์žˆ๋Š” ์ง์˜ ๋ฐฐ์ˆ˜๋กœ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฑธ๋Ÿฌ์งˆ ์ˆซ์ž๋“ค์ด๋‹ค.

๋”ฐ๋ผ์„œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์— ์ ์šฉ๋  ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” ์ œ๊ณฑ๊ทผ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž์ผ ๊ฒƒ์ด๋‹ค.

 

์ด์ œ ํŒŒ์ด์ฌ์„ ์ด์šฉํ•˜์—ฌ ์†Œ์ˆ˜๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

์†Œ์ˆ˜๊ตฌํ•˜๊ธฐ ์˜ˆ์ œ๋Š” ๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด์—์„œ ํฌ์ŠคํŒ…ํ•ด๋‘์—ˆ๋‹ค.

2021.03.09 - [๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€] - [๋ฐฑ์ค€/python] 1929๋ฒˆ : ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

 

[๋ฐฑ์ค€/python] 1929๋ฒˆ : ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ M๊ณผ N์ด ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ N ≤ 1,000,000) M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ์ž…

ye333.tistory.com

 

ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

for i in range(2, int(N**0.5)+1):
    if number[i]:
        for j in range(2*i, N+1, i):
            number[j] = False

for index in range(M, N+1):
    if number[index] and index!=1:
        print(index)

M๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ๊ฒƒ์ด๋‹ค. number์—๋Š” N+1๊ฐœ์˜ True๋ฅผ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค.

์ธ๋ฑ์Šค ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— N+1๊นŒ์ง€ ํ•ด์ค˜์•ผ 0๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ƒ๊ธด๋‹ค.

์ด์ œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆซ์ž๋“ค์€ False๋กœ ๋ฐ”๊พธ์–ด์ค„ ๊ฒƒ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€

๐Ÿ’ฅ 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์šฐ๊ณ  ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค๋Š” ์ ๊ณผ

๐Ÿ’ฅ ๋‚˜๋ˆ„๋Š” ์ˆ˜๋Š” ์†Œ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ˆ˜๋Š” ๋นผ๊ณ  ์ง€์›Œ์•ผํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. (ex. 2์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šธ ๋•Œ 2๋Š” ๋นผ๊ณ  ์ง€์›Œ์•ผํ•œ๋‹ค.)

 

2๋ถ€ํ„ฐ N์˜ ์ œ๊ณฑ๊ทผ์ธ N**0.5๋ณด๋‹ค 1ํฐ ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.

False๋กœ ๋ฐ”๋€ ์ˆ˜๋Š” ๋”์ด์ƒ ๋ณผ ํ•„์š” ์—†์œผ๋ฏ€๋กœ True์ธ ์ˆซ์ž๋งŒ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด if๋ฌธ์œผ๋กœ ๊ฑธ๋Ÿฌ์ค€๋‹ค.

for j in range(2*i, N+1, i):
            number[j] = False

๋‚˜๋ˆ„๋Š” ์ˆ˜๋Š” False๋กœ ๋ฐ”๊พธ๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์œ„๋ฅผ 2*i๋ถ€ํ„ฐ๋กœ ์„ค์ •ํ•˜๊ณ 

๋ฐฐ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด step์„ i๋กœ ์„ค์ •ํ•ด ๋ง์…ˆ์œผ๋กœ ๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ•ด๋‹น ์ˆซ์ž๋ฅผ False๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด number์—๋Š” ์†Œ์ˆ˜์ธ ์ˆซ์ž๋Š” True๋กœ, ์•„๋‹Œ ์ˆซ์ž๋Š” False๋กœ ์„ค์ •๋œ๋‹ค.

for index in range(M, N+1):
    if number[index] and index!=1:
        print(index)

์ด์ œ M๋ถ€ํ„ฐ N์˜ ๋ฒ”์œ„์— ์žˆ๋Š” True์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ 1์€ ์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

728x90

BELATED ARTICLES

more