🔍 알고리즘/SWEA
[Java] SWEA 4698.테네스의 특별한 소수 D3
탄치
2022. 7. 8. 17:28
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWRuoqCKkE0DFAXt
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
넓은 범위의 소수를 모두 구하는 '에라토스테네스의 채'를 응용한 문제입니다.
에라토스테네스의 채를 구현하는 방법을 알면 큰 어려움 없이 풀이할 수 있습니다.
이번 문제처럼 여러번 소수를 사용하는 문제에서도 필요한 범위의 소수를 미리 구해놓고 정답체크를 진행하면 매번 새로 소수를 구하는 것보다 좋은 성능을 얻을 수 있습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class q4698Re_SWEA_테네스의특별한소수 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int[] arr = new int[1_000_001];
arr[1] = 1;
for (int i = 2; i <= 1_000_000; i++) {
if (arr[i] == 0) {
for (int j = i * 2; j <= 1_000_000; j += i) {
arr[j] = 1;
}
}
}
for (int t = 1; t <= T; t++) {
st = new StringTokenizer(br.readLine());
int D = Integer.parseInt(st.nextToken());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int cnt = 0;
for (int i = A; i <= B; i++) {
if (arr[i] == 0) {
if (String.valueOf(i).contains(String.valueOf(D))) {
cnt++;
}
}
}
sb.append("#").append(t).append(" ").append(cnt).append("\n");
}
System.out.println(sb);
}
}
728x90