알고리즘/백준

[BaekJoon] 백준 2581번_ 소수 for JAVA

정석이 2021. 10. 4. 20:23

 

 

 

 


 

 

소수

 

정말 개많이 틀린 문제;;;.... 결국 남의 코드를 참고했다.

 

 

예전에 정리했던 적이 있었는데 최적의 코드라고 보기는 어려웠고

 

백준에서 맞은 사람의 코드도 살펴보았는데 다들 비슷하게 푼 느낌이라 넘어갔었다.

 

 

 

 

아무튼 이번 문제는 에라토스테네스의 체라는 방법을 다들 사용하였다...!!

 

 

 

 

 

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Baek2581 { // 소수
	
	public static boolean prime[];
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int M = Integer.parseInt(br.readLine());
		int N = Integer.parseInt(br.readLine());
				
		prime = new boolean[10001];
		get_prime();
		
		int sum = 0;
		int min = 50;
		for(int i = M; i <= N; i++) {
			if(prime[i] == false) { // 소수이면
				sum += i;
				if(min == 50) { // 그냥 첫번째 값 찾는거
					min = i;
				}
			}
		}
		
		if(sum == 0)
			System.out.println("-1");
		else {
			System.out.println(sum);
			System.out.println(min);
		}
	}
	
	public static void get_prime() { // 에라토스테네스의 체
		prime[0] = prime[1] = true;
		
		for(int i = 2; i <= Math.sqrt(prime.length); i++) { // N값의 루트값까지만 확인하면 된다.
			if(prime[i] == true) continue;
			for(int j = i * i; j < prime.length; j += i) // i의 배수값을 true로 만든다.
				prime[j] = true;
		}
	}

}

 

 

 

에라토스테네스의 체 방법을 사용하여 i의 배수만큼을 true로 바꿔주면

 

소수값은 false 가 된다!

 

 

 

 

 

 

 

 

 

 

 

 

남의 코드를 아주 참고했지만 이제 내 코드로~~!!!!