#문제
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
#풀이 & 학습한 내용
에라토스테네스의 체를 이용해야 하는 문제이다. supremo7.tistory.com/115에서 푼 것처럼 하나하나의 수가 소수인지 판정(시간복잡도 O(√n))한다면, 총 시간복잡도는 O(n√n)이 되고, 이때 worst case에서 1,000,000*1,000=1,000,000,000으로 1초(1억)인100,000,000을 넘으므로 불가능하다. 이때, 소스코드 10행에서처럼 i*i<=1000000까지만 고려하면 된다. 그리고 소스코드 12행에서 j++이 아닌 j+=i임을 주의하자.
#소스코드
|
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
|
#include<iostream>
#include<algorithm>
using namespace std;
bool prime[1000002];//지워졌으면 true(1), 소수인게 false(0)
int main(void) {
prime[1] = true;
for (int i = 2; i*i <= 1000000; i++) {
if (prime[i] == false) {
for (int j = i * 2; j <= 1000000; j+=i) {
prime[j] = true;
}
}
}
int a, b;
cin >> a >> b;
for (int i = a; i <= b; i++) {
if (prime[i] == false) {
cout << i << '\n';
}
}
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Math/BOJ_1929.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Math' 카테고리의 다른 글
| 모듈로 연산 정리 (0) | 2020.11.19 |
|---|---|
| [C++] 백준 6588번 : 골드바흐의 추측 (S1) (0) | 2020.11.19 |
| [C++] 백준 1978번 : 소수 찾기 (S4) (0) | 2020.11.19 |
| [C++] 백준 1934번 : 최소공배수 (S5) (0) | 2020.11.19 |
| [C++] 백준 2609번 : 최대공약수와 최소공배수 (S5) (0) | 2020.11.19 |