반응형
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
- 브루트포스
- 다이나믹 프로그래밍
- 그리디
- 운영체제
- programmers
- N과M
- 파이썬
- 딕셔너리
- 재귀
- DP
- 가상메모리 관리
- 가상메모리
- 스택
- dfs
- level2
- level3
- 수학
- level0
- 코딩테스트
- python
- 힙
- 백준
- level1
- MYSQL
- BOJ
- BFS
- 다익스트라
- 프로그래머스
- 구현
- 에라스토테네스의 체
Archives
- Today
- Total
동캄의 코딩도장
백준 1456 [거의 소수] 파이썬 본문
반응형
https://www.acmicpc.net/problem/1456
이 문제 생각보다 되게 어려웠다. 에라스토테네스의 체를 이용하려고 배열을 생성하려고 하니, 메모리 초과가 발생해서 순간 멍 해졌다.
이것저것 도전해보다가 결국 모르겠어서 GPT의 도움을 받았다.
1) 에라스토테네스의 체를 B까지 꼭 구현할 필요 없이, sqrt(B)+1까지만 구현하고 이에대해 소수 판별을 하면 된다.
2) 소수의 제곱이 범위내에 있는지 확인하면 된다.
#백준 1456 거의 소수
import math
A, B = map(int, input().split())
# **1. 에라토스테네스의 체를 이용한 소수 판별 (O(N^0.5))**
def sieve(limit):
is_prime = [True] * (limit + 1)
is_prime[0] = is_prime[1] = False # 0과 1은 소수가 아님
for i in range(2, int(math.sqrt(limit)) + 1):
if is_prime[i]: # i가 소수라면
for j in range(i * i, limit + 1, i):
is_prime[j] = False # i의 배수는 모두 소수가 아님
return [num for num in range(2, limit + 1) if is_prime[num]]
# **2. 소수를 이용한 '거의 소수' 찾기**
primes = sieve(int(math.sqrt(B))) # B의 제곱근까지만 소수 구하기
count = 0
for prime in primes:
power = prime * prime # 소수의 제곱부터 시작
while power <= B:
if power >= A:
count += 1
if power > B // prime: # 오버플로우 방지
break
power *= prime
print(count)
갈길이 멀다..
반응형
'코테 > BOJ' 카테고리의 다른 글
백준 17071 [숨바꼭질 5] 파이썬 (0) | 2025.03.16 |
---|---|
백준 1038 [감소하는 수] 파이썬 (0) | 2025.03.15 |
백준 4948 [베르트랑 공준] 파이썬 (0) | 2025.03.15 |
백준 10610 [30] 파이썬 (0) | 2025.03.15 |
백준 2960 [에라토스테네스의 체] 파이썬 (0) | 2025.03.15 |