[BOJ] 1929번 : 소수 구하기

2024. 9. 22. 16:16Algorithm

1. problem : 

https://www.acmicpc.net/problem/1929

 

 

2. solution 1 :

#include <bits/stdc++.h>
using namespace std;
int n, m; 

vector<int> eratos(int a) {
	vector<int> primes; 
	vector<bool> numbers(1000005, true); 
	numbers[1] = false; 
	for (int i = 2; i * i <= a; i++) {
		if (!numbers[i]) continue;
		for (int j = i * i; j <= a; j += i) {
			numbers[j] = false; 
		}
	}
	for (int i = 2; i <= a; i++) {
		if (numbers[i]) primes.push_back(i);
	}
	return primes;
}

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m; 
	vector<int> primes = eratos(m); 
	for (auto p : primes) {
		if (n <= p) cout << p << '\n';
	}
}

 sieve of Eratosthenes를 이용해 풀었다. 아직 에라토스네스의 체가 이해가 가지는 않지만, 외워서 풀었다. 

여기서 vector <bool>을 이용하면, 공간 절약과 cache hit rate 가 높아진다고 한다. 

'Algorithm' 카테고리의 다른 글

[BOJ] 15988번 : 1,2,3 더하기 3  (0) 2024.09.23
[BOJ] 11653번 : 소인수분해  (1) 2024.09.22
[BOJ] 1978번 : 소수 찾기  (1) 2024.09.22
[BOJ] 2156번 : 포도주 시식  (0) 2024.09.22
[BOJ] 11656번 : 접미사 배열  (1) 2024.09.21