Skip to content

Commit 1917c9a

Browse files
committed
solve: 1929 소수 구하기
1 parent 03885e9 commit 1917c9a

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
"""
3+
문제 이름: 소수 구하기
4+
문제 번호: 1929
5+
문제 링크: https://www.acmicpc.net/problem/1929
6+
난이도: Silver II
7+
태그: 수학, 정수론, 소수 판정, 에라토스테네스의 체
8+
"""
9+
import sys
10+
11+
12+
def input(): return sys.stdin.readline().rstrip()
13+
14+
15+
def is_prime(m: int, n: int) -> bool:
16+
if n <= 1:
17+
return []
18+
19+
l = n-m+1
20+
prime = [True] * l
21+
22+
for i in range(2, int(n**0.5)+1):
23+
for j in range(2*i, n+1, i):
24+
if j-m >= 0 and prime[j-m]:
25+
prime[j-m] = False
26+
27+
return [x+m for x in range(2-m if m <= 2 else 0, l) if prime[x]]
28+
# return not any([num % i == 0 for i in range(2, int(num**0.5)+1)])
29+
30+
31+
nums = is_prime(*map(int, input().split()))
32+
for n in nums:
33+
print(n)
34+
35+
# 948ms
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
file: "1929.md"
3+
name: "소수 구하기"
4+
src: "https://www.acmicpc.net/problem/1929"
5+
tags:
6+
- 수학
7+
- 정수론
8+
- 소수 판정
9+
- 에라토스테네스의 체
10+
done: true
11+
draft: false
12+
level: 9
13+
difficulty: "Silver II"
14+
date: 2021-11-07
15+
---
16+
17+
# 소수 구하기
18+
19+
```python
20+
import sys
21+
22+
def input(): return sys.stdin.readline().rstrip()
23+
24+
def is_prime(m: int, n: int) -> bool:
25+
# n 1 이하일 경우 빈 리스트 반환
26+
if n <= 1:
27+
return []
28+
29+
# n-m+1 크기를 갖는 배열 생성
30+
# n=10000, m= 100010 - > l = 11
31+
l = n-m+1
32+
prime = [True] * l
33+
34+
# n의 제곱근 까지 loop
35+
# n의 약수는 반드시 sqrt(n) 범위 안에 존재한다.
36+
for i in range(2, int(n**0.5)+1):
37+
for j in range(2*i, n+1, i):
38+
# j-m+1 이 0보다 클때 검사한다.
39+
# 예를들어 m 값이 100 일경우
40+
# j가 100이 될때 검사하고 생성된 prime 배열 인덱스에 m 값을 빼서 매칭해준다
41+
if j-m >= 0 and prime[j-m]:
42+
prime[j-m] = False
43+
44+
# m이 2미만일경우 2-m -> n-m+1 까지 루프 (0과 1 생략)
45+
return [x+m for x in range(2-m if m <= 2 else 0, l) if prime[x]]
46+
47+
nums = is_prime(*map(int, input().split()))
48+
for n in nums:
49+
print(n)
50+
51+
# 948ms
52+
```

0 commit comments

Comments
 (0)