이 튜토리얼에서는 C++ 표준 템플릿 라이브러리를 사용하여 주어진 숫자 범위에 대해 소수를 인쇄하는 프로그램에 대해 논의할 것입니다.
여기에서 두 개의 숫자 say와 b가 주어집니다. 작업은 이 범위에서 오는 모든 소수를 인쇄하는 것입니다. 이를 위해 우리는 에라토스테네스의 체 방법을 서브루틴으로 실행하여 사용할 것입니다. 동시에 모든 소수를 벡터에 저장하고 마지막으로 모두 인쇄합니다.
예시
#include<bits/stdc++.h> using namespace std; typedef unsigned long long int unll; vector<unll> eratosthemes(unll n){ vector<bool> prime_num(n+1,true); prime_num[0] = false; prime_num[1] = false; int m = sqrt(n); for (unll p=2; p<=m; p++){ if (prime_num[p]){ for (unll i=p*2; i<=n; i += p) prime_num[i] = false; } } vector<unll< elements; for (int i=0;i<n;i++) if (prime_num[i]) elements.push_back(i); return elements; } bool check_zero(unll i){ return i == 0; } vector<unll> sieve_range(unll start,unll end){ vector<unll> s1 = eratosthemes(start); vector<unll> s2 = eratosthemes(end); vector<unll> elements(end-start); set_difference(s2.begin(), s2.end(), s1.begin(), s2.end(), elements.begin()); vector<unll>::iterator itr = remove_if(elements.begin(),elements.end(),check_zero); elements.resize(itr-elements.begin()); return elements; } int main(void){ unll start = 10; unll end = 90; vector<unll> elements = sieve_range(start,end); for (auto i:elements) cout<<i<<' '; return 0; }
출력
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89