2960번: 에라토스테네스의 체
2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다.
www.acmicpc.net
/*
문제
에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
이 알고리즘은 다음과 같다.
2부터 N까지 모든 정수를 적는다.
아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(2, K) < N ≤ 1000)
출력
첫째 줄에 K번째 지워진 수를 출력한다.
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int a[10001];
int N, K;
int count = 0;
cin >> N >> K;
//2부터 10까지 1로 만들어줍니다
for (int i = 2; i <= N; i++) {
a[i] = 1;
}
//2부터 배수를 구해 나가면서 1로 되어있으면 0으로 바꿔줍니다. 그리고 카운트 증가
for (int i = 2; i <= N; i++) {
for (int j = 1; i * j <= N; j++) {
if (a[i * j] == 1) {
a[i * j] = 0;
count++;
//카운트가 K와 같아졌을 때의 i*j 곱 출력
if (count == K) {
cout << i * j << endl;
return 0;
}
}
}
}
}
나동빈님 책 보고 알고리즘 이해하고
머릿속에 스스로 생각하며 푸니깐 맞네.. 완전짱이당
'Programming > Algorithm (C++)' 카테고리의 다른 글
[백준 2581] c++ :: 소수 (에라토스테라스의 체로 구현) (0) | 2021.01.27 |
---|---|
[백준 1929]c++ :: 범위가 있는 에라토스테네스의 체 (소수 구하기) (0) | 2021.01.27 |
[백준 2702] c++ :: 초6 수학 (최대공약수 최소공배수) (0) | 2021.01.27 |
[백준 11098] c++ :: 첼시를 도와줘(vector연습) (0) | 2021.01.27 |
[백준 1094]c++ :: 막대기 (0) | 2021.01.26 |