C++ Algorithm/백준 알고리즘 문제 풀이
소수 구하기
3영2
2019. 2. 13. 20:04
반응형
1987번 문제 : 소수 찾기
https://www.acmicpc.net/problem/1978
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 32 33 34 35 36 37 38 39 40 41 | #include <iostream> #include <vector> using namespace std; int main() { int num; cin >> num; int counter = 0; vector<int> v; while (num > 0) { int inp; cin >> inp; v.push_back(inp); num--; } for (auto i:v) { if (i != 1) { int j = i - 1; while (true) { if (i % j != 0) { j--; } else { if (j == 1) counter++; break; } } } } cout << counter; return 0; } | cs |
2581번 문제 : 소수
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <iostream> #include <vector> using namespace std; void FindPrimeNumber(int n, vector<int>& v) { if (n != 1) { int j = n - 1; while (true) { if (n % j != 0) { j--; } else { if (j == 1) v.push_back(n); break; } } } } int main() { int a, b; cin >> a >> b; vector<int> v; for (int i = a; i <= b; i++) { FindPrimeNumber(i, v); } if (!v.empty()) { int sum = 0; int min = v.front(); for (auto i : v) { sum += i; if (i < min) min = i; } cout << sum << endl << min; } else cout << "-1"; return 0; } | cs |
1929번 문제 : 소수 구하기
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <iostream> #include <vector> using namespace std; void CheckPrimeNumber(int n, int s, vector<int>& v) { //Count Prime Number using SieveOfEratosthenes bool *prime = new bool[n + 1]; for (int i = 0; i < n + 1; i++) { prime[i] = true; } prime[0] = false; prime[1] = false; for (int p = 2; p*p <= n; p++) { if (prime[p] == true) { for (int i = p * 2; i <= n; i += p) prime[i] = false; } } for (int p = s; p <= n; p++) { if (prime[p] == true) v.push_back(p); } delete[] prime; } int main() { int start, end; cin >> start >> end; vector<int> v; CheckPrimeNumber(end, start, v); for (auto i : v) cout << i << "\n"; return 0; } | cs |
메모:
-에라토스테네스의 체 활용, 시간 복잡도: O(n*log(log(n)))
4948번 문제 : 베르트랑 공준
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <iostream> #include <vector> using namespace std; void CheckPrimeNumber(int n, int s, vector<int>& v) { //Count Prime Number using SieveOfEratosthenes bool *prime = new bool[n + 1]; for (int i = 0; i < n + 1; i++) { prime[i] = true; } prime[0] = false; prime[1] = false; for (int p = 2; p*p <= n; p++) { if (prime[p] == true) { for (int i = p * 2; i <= n; i += p) prime[i] = false; } } for (int p = s; p <= n; p++) { if (prime[p] == true) v.push_back(p); } delete[] prime; } int main() { vector<int> answer; while (true) { vector<int> v; int input; cin >> input; if (input != 0) { if (input != 1) { CheckPrimeNumber(input * 2 - 1, input + 1, v); answer.push_back(v.size()); } else { answer.push_back(1); } } else break; } for (auto i : answer) cout << i << endl; return 0; } | cs |
9020번 문제 : 골드바흐의 추측
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <iostream> #include <vector> #include <algorithm> using namespace std; void CheckPrimeNumber(int n, vector<int>& v) { //Count Prime Number using SieveOfEratosthenes bool *prime = new bool[n + 1]; for (int i = 0; i < n + 1; i++) { prime[i] = true; } prime[0] = false; prime[1] = false; for (int p = 2; p*p <= n; p++) { if (prime[p] == true) { for (int i = p * 2; i <= n; i += p) prime[i] = false; } } for (int p = 2; p <= n; p++) { if (prime[p] == true) v.push_back(p); } delete[] prime; } int main() { vector<int> answer; int num; cin >> num; for (int i = 0; i < num; i++) { vector<int> v; int input; cin >> input; CheckPrimeNumber(input, v); int temp = input / 2; while (temp > 1) { if (find(v.begin(), v.end(), temp) != v.end()) { if (find(v.begin(), v.end(), input - temp) != v.end()) { answer.push_back(temp); answer.push_back(input - temp); break; } } temp--; } } for (int i = 0; i < answer.size(); i++) { cout << answer.at(i) << " "; if (i % 2 == 1) cout << endl; } return 0; } | cs |
반응형