Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 21.12.09. 4948번 - 베르트랑 공준 본문

Algorithm/BaekJoon

백준 21.12.09. 4948번 - 베르트랑 공준

HappyFrog 2021. 12. 9. 18:09

def IsPrime(n):
    seive = [True] * n

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

    return [i for i in range(2, n) if seive[i] == True]

        
listPrimeNumbers = IsPrime(123456 * 2)

while True:
    M = int(input())
    if M == 0:
        break
    result = []   
    
    for i in listPrimeNumbers:
        if M < i <= 2 * M:
            result.append(i)
    print(len(result))
  • 이번에도 에라토스테네스의 체를 사용하는 문제입니다.
  • IsPrime함수를 return값이 리스트를 반환하는 방향으로 작성했습니다.
  • 입력된 n 보다 크고 2n보다 작거나 같은(n < i <= 2n)의 범위를 가지므로 미리 준비해둘 소수 목록인 listPrimeNumbers는 IsPrime(123456 * 2)가 됩니다.
  • 미리 만들어둔 listPrimeNumbers의 요소와 주어진 범위를 비교하여 범위에 포함되는 소수라면 result에 해당 소수를 추가해줍니다.
  • 그리고 반복문을 돌아 만들어진 result 리스트의 길이를 출력해주면 됩니다.
    • result를 list가 아닌 int형식으로 만들어서 조건에 부합할 때마다 +1을 해주어도 됩니다.
    • ▼아래 코드 while안의 for반복문내용만 변했습니다

 

def IsPrime(n):
    seive = [True] * n

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

    return [i for i in range(2, n) if seive[i] == True]

        
listPrimeNumbers = IsPrime(123456 * 2)

while True:
    M = int(input())
    if M == 0:
        break
    count = 0    
    
    for i in listPrimeNumbers:
        if M < i <= 2 * M:
            count += 1
    print(count)

▲ 이런 방식으로 int 형식으로 세서 출력해도 됩니다.