Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- redux
- Til
- UI
- vercel
- UX
- CSS
- REST_API
- 카카오
- 자바스크립트
- html
- level1
- 프로토타입
- React
- 운영체제
- 백준
- superstarjypnation
- web
- 회고
- 생활코딩
- 스택
- Next.js
- 자료구조
- useState
- 해시테이블
- 프로그래머스
- javascript
- 큐
- 코드스테이츠
- mysemester
- 30daysdowoonchallenge
Archives
- Today
- Total
데굴데굴
[파이썬] 4948번: 베르트랑 공준 본문
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
베르트랑 공준
- 임의의 자연수 n에 대하여 n보다 크고 2n보다 작거나 같은 소수는 적어도 하나 존재한다.
ex) 10보다 크고 20보다 작거나 같은 소수는 4개 {11,13, 15, 19}
14보다 크고 28보다 작거나 같은 소수는 3개 {17, 19, 23}
자연수 n이 주어졌을 때 n보다 크고 2n보다 작거나 같은 소수의 개수를 구하는 프로그램 작성
[구조]
소수를 찾는 함수를 정의
주어진 범위에 함수 적용하여 소수만 골라내어 리스트에 저장
입력된 수가 리스트에 저장되어 있고 2*n 이하인지 확인하기
# 베르트랑 공준
# 함수 정의 후 반복문에 집어넣기
def prime(m):
if m == 1:
return False
for j in range(2, int(m**0.5 + 1)): # m에 0.5제곱 = 루트
if m % j == 0:
return False
return True
lst = list(range(2, 246912)) # 범위 제한
check = []
for i in lst: # 해당 범위에서 소수만 따로 집어넣기
if prime(i):
check.append(i)
while True:
cnt = 0
n = int(input())
if n == 0:
break
for i in check:
if n < i <= 2*n: # 자신과 같은 수이면 안되므로 n에는 등호 넣지 않음.
cnt += 1
print(cnt)
왜 루트를 써서 하는지는 이 링크( 백준 4948번 파이썬 (velog.io))에 자세하게 설명되어 있다.
친절한 인터넷 세상...
굳이 지정 수까지 전부 다 돌 필요 없이 루트씌운 값까지만 돌아주면 훨씬 시간이 절약된다.
처음에는 while문을 입력해놓고 그 안에 소수 판별 코드를 집어넣으려고 했다. 그런데 이렇게 하면 인덴트가 끝도 없이 들어가서 보기에도 안 좋고 코드를 짜는 나조차도 헷갈리게 돼서 전부 지우고 다시 생각했다.
'algorithm > 백준' 카테고리의 다른 글
[파이썬] 10872번: 팩토리얼 (0) | 2022.06.14 |
---|---|
[파이썬] 9020번: 골드바흐의 추측 (0) | 2022.06.13 |
[파이썬] 1929번: 소수 구하기 (0) | 2022.04.20 |
[파이썬] 2581번: 소수 (0) | 2022.04.07 |
[파이썬] 1978번: 소수 찾기 (0) | 2022.04.04 |
Comments