์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Python

[BOJ/Step9] 2581 : ์†Œ์ˆ˜ (Python)

NaNaRin๐Ÿ™ƒ 2021. 2. 14. 16:56

www.acmicpc.net/problem/2581

 

2581๋ฒˆ: ์†Œ์ˆ˜

M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜์ธ ๊ฒƒ์„ ๋ชจ๋‘ ์ฐพ์•„ ์ฒซ์งธ ์ค„์— ๊ทธ ํ•ฉ์„, ๋‘˜์งธ ์ค„์— ๊ทธ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.  ๋‹จ, M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋Š” ์ฒซ์งธ ์ค„์— -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net


๋ฌธ์ œ

์ž์—ฐ์ˆ˜ M๊ณผ N์ด ์ฃผ์–ด์งˆ ๋•Œ M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜์ธ ๊ฒƒ์„ ๋ชจ๋‘ ๊ณจ๋ผ ์ด๋“ค ์†Œ์ˆ˜์˜ ํ•ฉ๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด M=60, N=100์ธ ๊ฒฝ์šฐ 60์ด์ƒ 100์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜๋Š” 61, 67, 71, 73, 79, 83, 89, 97 ์ด 8๊ฐœ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ์ด๋“ค ์†Œ์ˆ˜์˜ ํ•ฉ์€ 620์ด๊ณ , ์ตœ์†Ÿ๊ฐ’์€ 61์ด ๋œ๋‹ค.

 

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์— M์ด, ๋‘˜์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค.

M๊ณผ N์€ 10,000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

 

์ถœ๋ ฅ

M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜์ธ ๊ฒƒ์„ ๋ชจ๋‘ ์ฐพ์•„ ์ฒซ์งธ ์ค„์— ๊ทธ ํ•ฉ์„, ๋‘˜์งธ ์ค„์— ๊ทธ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. 

๋‹จ, M์ด์ƒ N์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ค‘ ์†Œ์ˆ˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋Š” ์ฒซ์งธ ์ค„์— -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1

60

100

 

์˜ˆ์ œ ์ถœ๋ ฅ 1

620

61

 

์˜ˆ์ œ ์ž…๋ ฅ 2

64

65

 

์˜ˆ์ œ ์ถœ๋ ฅ 2

-1


ํ’€์ด

(1) m๊ณผ n ์‚ฌ์ด ์ˆซ์ž๋ฅผ ๊ฐ๊ฐ ์†Œ์ˆ˜ ํŒ๋ณ„

  1. ์†Œ์ˆ˜๋ฉด True๋ฅผ, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ is_prime(a)

    1-1. a๊ฐ€ 1์ด๋ฉด return False

    1-2. a๋ฅผ 2~a-1์˜ ์ˆ˜๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜๋ฉด return False

    1-3. a๋ฅผ 2~a-1์˜ ์ˆ˜๋กœ ๋ชจ๋‘ ๋‚˜๋ˆด๋Š”๋ฐ ํ•œ๋ฒˆ๋„ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์ง€ ์•Š์œผ๋ฉด return True

  2. m๊ณผ n ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ mn

  3. m๋ถ€ํ„ฐ n๊นŒ์ง€ a๋ฅผ ์†Œ์ˆ˜ ํŒ๋ณ„, is_prime์ด True๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋งŒ mn์— a ์ถ”๊ฐ€

  4. mn์ด ๋น„์–ด์žˆ์œผ๋ฉด -1์ถœ๋ ฅ

  5. mn์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด mn์˜ ํ•ฉ๊ณผ ์ตœ์†Ÿ๊ฐ’ ์ถœ๋ ฅ

# 2581-1.py

m = int(input())
n = int(input())
mn = []


def is_prime(a):
    if a == 1:
        return False
    for j in range(2, i):
        if i % j == 0:
            return False
    return True


for i in range(m, n+1):
    if is_prime(i):
        mn.append(i)

if not mn:
    print(-1)
else:
    print(sum(mn))
    print(min(mn))

 

(2) 1~10000๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์†Œ์ˆ˜ ํŒ๋ณ„ ํ›„ ์ž…๋ ฅ๋ฐ›์•„ ํ™•์ธ
  1. prime ๋ฆฌ์ŠคํŠธ์•ˆ์— ๋ฏธ๋ฆฌ 2, 3์„ ๋„ฃ์–ด๋‘”๋‹ค

    2. 4~10000๊นŒ์ง€์˜ ์ˆซ์ž i๋ฅผ ์†Œ์ˆ˜ ํŒ๋ณ„

    2-1. i๋ฅผ prime์•ˆ์˜ ์ˆซ์ž๋กœ ๋‚˜๋ˆ  ๋ชจ๋‘ 0์ด ์•„๋‹๋•Œ๋งŒ prime ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค

  2. m๊ณผ n ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ mn

  3. m๋ถ€ํ„ฐ n๊นŒ์ง€ a๊ฐ€ prime ์•ˆ์— ์กด์žฌํ•  ๋•Œ๋งŒ mn์— a ์ถ”๊ฐ€

  4. mn์˜ ๊ธธ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด mn์˜ ํ•ฉ๊ณผ ์ตœ์†Ÿ๊ฐ’ ์ถœ๋ ฅ

  5. mn์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด -1์ถœ๋ ฅ

# 2581-2.py

m = int(input())
n = int(input())
mn = []

prime = [2, 3]
for i in range(4, 10001):
    pp = [i % k for k in prime]
    if all(pp):
        prime.append(i)

for i in range(m, n+1):
    if i in prime:
        mn.append(i)

if len(mn) != 0:
    print(sum(mn))
    print(min(mn))
else:
    print(-1)