[백준] 4948 파이썬 (베르트랑 공준)

노을·2022년 4월 2일
0

Algorithm

목록 보기
20/21
post-thumbnail

코드

# 소수인지 아닌지 판별하는 함수
def sosu(x):
    if x==1:           
        return False
    for i in range(2,int(x**0.5)+1):  
        if x%i==0:						
            return False
    return True	

# 2부터 246911까지의 숫자 중 소수인 수를 memo에 담기
all_list = list(range(2,246913))
memo = []							

for i in all_list:						
    if sosu(i):							
        memo.append(i) 
        
# 위에서 구한 memo(소수리스트)에 
# n보다 크고 2n보다 작거나 같은 수가 있다면 count 늘리기  
while True:	
    n = int(input())			
    count=0
    if n==0:
        break
    for i in memo:
        if n<i<2*n+1:		
            count+=1					
    print(count)	

풀이

# 소수인지 아닌지 판별하는 함수
def sosu(x):
    if x==1:           
        return False
    for i in range(2,int(x**0.5)+1):  
        if x%i==0:						
            return False
    return True	

먼저 소수를 판별하는 함수이다.
1978, 2581, 1929번 문제를 풀었다면 이해할 것이므로 설명 생략

all_list = list(range(2,246913))
memo = []							

for i in all_list:						
    if sosu(i):							
        memo.append(i) 

all_list 에 2부터 246911까지의 숫자를 넣는다.
왜냐하면 1<=n<=123456 라는 제한이 있기 때문이다.
찾아야 하는 소수는 n보다 크고 2n보다 작거나 같아야 하므로,
range(2, 246913) 이다.
all_list의 있는 값이 소수라면 memo에 추가한다.


# 위에서 구한 memo(소수리스트)에 
# n보다 크고 2n보다 작거나 같은 수가 있다면 count 늘리기  
while True:	
    n = int(input())			
    count=0
    if n==0:
        break
    for i in memo:
        if n<i<2*n+1:		
            count+=1					
    print(count)	

n이 0이라면 while문을 나가고
n이 0이 아니면 memo에 있는 소수들 중에서
n<i<2*n+1 를 만족하면 count +=1을 해준다.

0개의 댓글