250x250
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
- Class 2
- 브론즈 II
- 한국정보올림피아드
- Class 1
- 백트래킹
- 그래프 이론
- 골드
- 실버
- 사칙연산
- 그래프 탐색
- solved.ac class
- 수학
- 너비 우선 탐색
- 브론즈
- class 5
- Class 4
- 문자열
- Class 3
- 다이나믹 프로그래밍
- 실버 V
- 정렬
- 실버 III
- practice
- 정수론
- 구현
- 브루트포스 알고리즘
- PS
- Easy
- greedy
- 브론즈 III
Archives
- Today
- Total
0과 1의 쉼터
[백준 01456] 거의 소수 [Java] 본문
728x90
문제
어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다.
두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다.
입력
첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다.
출력
첫째 줄에 총 몇 개가 있는지 출력한다.
풀이
A와 B사이의 수 중 소수의 N제곱에 해당하는 "거의 소수"의 갯수를 구하는 문제다.
거의 소수는 최소 p^2이므로, A와 B에 대해 2 ~ sqrt(B)사이의 소수를 제곱해보며 유요한 수를 찾으면 된다.
우선, B <= 10^14이므로, 10^7까지의 수들에 대해 어떤 수가 소수인지 알아야 한다.
Sieve of EratosThenes를 이용해 소수들을 구해주자.
이제 2부터 sqrt(B)까지의 소수들에 대해 제곱수가 범위에 해당하는지 확인해야 한다.
이때, 오버플로우가 발생할 수 있다.
거의 소수에 i를 제곱하지 말고 B에 i를 나누어 안전하게 계산하자.
소스코드
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 01790] 수 이어 쓰기 2 [Java] (0) | 2024.04.10 |
---|---|
[백준 01019] 책 페이지 [Java] (0) | 2024.04.09 |
[백준 06359] 만취한 상범 [Java] (0) | 2024.04.05 |
[백준 11478] 서로 다른 부분 문자열의 개수 [Python] (1) | 2024.04.01 |
[백준 02437] 저울 [Python] (1) | 2024.03.31 |
Comments