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 | 31 |
Tags
- 10800
- boj 2470
- boj 1503
- 백준 1697
- boj 2636
- 백준 2178
- boj 2206
- 백준 1806
- 백준 2661
- 백준 1503
- 백준 2636
- 백준 2206
- 백준 2108
- 백준 2470
- boj 19238
- 2636
- boj 2108
- boj 2178
- 백준 19238
- 백준 2167
- boj 1697
- boj 2635
- boj 2661
- boj 1806
- boj 2167
- 백준 10800
- 백준 2635
- 2167
- boj 2667
- boj 10800
Archives
- Today
- Total
말랑말랑한 개발자 이야기
[백준 1929번] 소수 구하기 본문
[백준 1929번] 소수 구하기
문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
풀이
#include <iostream>
using namespace std;
int main() {
int M,N;
cin >> M >> N;
bool arr[1000001] = {false,};
arr[1] = true;
for(int i=2;i<=1000;i++){
int k=2;
if(arr[i]==true) continue;
while(i*k <= 1000000){
arr[i*k] = true;
k++;
}
}
for(int i=M;i<=N;i++){
if(arr[i]==false) cout << i << '\n';
}
return 0;
}
심심풀이땅콩으로 풀어본 문제이다. 에라토스테네스의 체라는 방식을 사용하여 소수를 구한다. 이 방법은 소수임을 판단하는 데 있어 숫자 하나마다 판별하는게 아니라 어떤 범위내에서 2의 배수를 제외시키고, 3의 배수를 제외시키고... 하는 방식으로 소수가 아닌 숫자들을 제외시키고 남은 숫자들을 소수로 판단하는 방법이다. 소수를 판단할 때에 특성상 제곱근까지만 확인하면 되기때문에 시간을 줄일 수 있다.
1이 소수가 아님을 간과하고 문제를 푼 것 빼고는 문제되는 부분이 없었다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 1339번] 단어 수학 (0) | 2021.01.09 |
---|---|
[백준 11659번] 구간 합 구하기 4 (0) | 2021.01.09 |
[백준 11000번] 강의실 배정 (0) | 2021.01.06 |
[백준 1655번] 가운데를 말해요 (0) | 2021.01.06 |
[백준 1107번] 리모컨 (0) | 2021.01.06 |