일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Bronze
- BOJ
- SWEA
- algorithm
- 3D RPG
- 프로세스 상태
- stack
- Gold
- Project
- knapsack Problem
- Zenject
- effective C++
- level3
- Euclidean
- dirtyflag pattern
- level1
- 프로그래머스
- Unity
- Modern C++
- Flyweight Pattern
- solid 원칙
- Silver
- 8-Puzzle
- programmers
- PrefixSum
- BFS
- two pointer
- binary search
- trie
- LEVEL2
Archives
- Today
- Total
Patrick's Devlog
[BOJ/C++] 소수(2581번) 본문
1. 문제 개요
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
1-1. 설명
자연수 M과 N이 주어질 때 M이상 N 이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성한다.
1-2. 제한사항
- 입력의 첫째줄이 M, 둘째줄이 N 주어짐.
- M과 N은 10,000이하의 자연수이며 M은 N보다 작거나 같음
- 자연수 중 소수를 찾아 첫째줄에 합을, 둘째줄에 최솟값을 출력
- M이상 N이하 자연수 중 소수가 없을 시 -1만 출력
2. 구현
2-1. 풀이
정말 단순하게 값 하나를 두고 2부터 나눠가며 나머지가 0이면 false, 모든 수가 나머지가 0이 아니면 true를 반환하게끔 하였다. 어차피 범위 내의 소수만 구하면 되는 부분이라 시간에 얽히지 않고 단순 코딩으로 진행하였다.
2-2. 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool checkPrimeNumber(int num);
int main() {
int N, M, firstNum = 0, sum = -1;
cin >> M;
cin >> N;
for (int i = M; i <= N; i++) {
if (true == checkPrimeNumber(i)) {
if (firstNum == 0) {
firstNum = i;
sum++;
}
sum += i;
}
}
cout << sum << endl;
if (sum != -1) cout << firstNum << endl;
}
bool checkPrimeNumber(int num) {
if (num < 2) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
'Algorithm > Algorithms Practice' 카테고리의 다른 글
[BOJ/C++] 완전제곱수(1977번) (2) | 2022.05.18 |
---|---|
[BOJ/C++] 오늘도 졌다(14582번) (0) | 2022.05.17 |
[BOJ/C++] 스네이크버드(16435번) (0) | 2022.05.12 |
[BOJ/C++] 2007년(1924번) (0) | 2022.05.10 |
[프로그래머스/C++] 삼각 달팽이 (0) | 2022.05.06 |