백준 2581 소수 - 실버 5
이것도 1978번이랑 똑같이 에라토스~의 채로 풀면된다.
아이디어는 하기와 같다.
1) 1~10001크기의 배열을 만들고 1로 값을 채운다.
2) for문으로 배수를 돌아가면서 배수이면 0값을 넣어준다.
10000까지돌았을때, 배열의 값이 1인 값들은 소수 0인값들은 소수가 아닌수로 남게된다.
M~N까지 의 방에 값들이 1의인 배열방의 순서들을 더한다. ex) arr[67]은 숫자 67을 나타낸다.
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int []arr = new int[10001];
for(int i=2; i<arr.length; i++){
arr[i] = 1;
}
for(int i=2; i<arr.length-1; i++){
if(arr[i]==0){continue;}
for(int j=i+1; j<arr.length; j++){
if(j%i==0){
arr[j] = 0; //배수이면 0 넣음.
}
}
}
int sum=0; int min = 10000;
for(int i=m ; i<=n; i++){
if(arr[i]==1){ // 이면 소수
sum += i;
if(i<min){
min = i;
}
}
}
if(sum==0){
System.out.println(-1);
return;
}
System.out.println(sum);
System.out.println(min);
}// main method end
}//class end
'알고리즘' 카테고리의 다른 글
D+10 1759 암호 만들기 (0) | 2021.10.25 |
---|---|
D+9 백준 14888 연산자 끼워넣기 (0) | 2021.10.15 |
D+8 백준 1292 쉽게 푸는 문제 (0) | 2021.10.13 |
D+7 백준 1978 소수찾기 (0) | 2021.10.12 |
D+7 백준 2693 N번째 큰 수 (0) | 2021.10.12 |