Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- mathematics for computer science
- lqr
- 실버 5
- mit
- 큐
- 전국 대학생 수학 경시대회
- 대수경
- C++
- 구현
- 자료구조
- 텔레스코픽로봇
- 최적제어
- HJB방정식
- 수학
- LeggedRobot
- 다리로봇
- std::sort
- baekjoon problem solving
- 문자열
- 논문리뷰
- baekjoon
- BOJ
- 정렬
- 집합과 맵
- MIT opencourse
- 실버 4
- 백준
- 로봇공학
- 6.042j
- 로보틱스
Archives
- Today
- Total
서두르지 말고 쉬지 말자
백준 1978번 소수 찾기 (C++) 본문
solvd.ac 티어 : 브론즈2
문제 유형 : 수학, 정수론, 소수 판정
문제 배경 지식
- 제곱근 최적화 (Square root optimization)
어떤 자연수 x가 소수인지 판별하려면 2부터 x-1까지의 수를 나눠서 확인할 수 있다. 그러나, 이는 O(n)으로 비효율적이다.
더 효율적인 방법이 제곱근 최적화이다. 제곱근 최적화는 확인할 필요없이 2부터 sqrt(x)까지만 나눠서 확인하면 충분하다는 알고리즘이다. 시간 복잡도는 O(sqrt(n))으로 위의 방법보다 효율적이다.
- 간단한 증명

문제 해결 소감 : 소수 판별 알고리즘을 학습할 수 있어서 기쁘다
문제 해결 전략 : 1은 따로 처리해주어야 하고 이외에는 제곱근 최적화 알고리즘 을 그대로 구현했다.
#include <cmath>
#include <iostream>
#include <vector>
int n;
int temp;
int ans;
std::vector<int> v;
int main(void) {
std::cin >> n;
ans = n;
for (int i = 0; i < n; i++) {
std::cin >> temp;
v.push_back(temp);
}
for (int num : v) {
if (num == 1) {
ans -= 1;
continue;
}
int sqrt = static_cast<int>(std::sqrt(num));
for (int i = 2; i <= sqrt; i++) {
if (num % i == 0) {
ans -= 1;
break;
}
}
}
std::cout << ans;
}반응형
'코딩 공부 > Baekjoon Problem Solving' 카테고리의 다른 글
| 백준 2164번 카드 2(C++) (0) | 2025.07.16 |
|---|---|
| 백준 11650번 좌표 정렬하기 (C++) (2) | 2025.07.14 |
| 백준 11866번 요세푸스 문제 0 (C++) (0) | 2025.07.07 |
| 백준 15829번 Hashing (C++) (0) | 2025.07.07 |
| 백준 9012번 괄호 (C++) (1) | 2025.07.05 |
