File tree 2 files changed +87
-0
lines changed
baekjoon/problems/[1929]소수 구하기 2 files changed +87
-0
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
+ ```
You can’t perform that action at this time.
0 commit comments