//////
Search
📓

11/3 회고록

생성일
2022/11/06 16:58
태그

김기헌

소수 구하기

소수 구하는 방법
2부터 n-1까지 나누어 보며 판단
2부터 root(n) {==sqrt(n)} 까지 나누어 보며 판단
2번의 방법으로도 충분히 빠른 시간 안에 소수인지 판별할 수 있다.
하지만 n이하의 수 중 소수를 찾으라는 문제가 나온다면 n개의 수를 모두 각각 소수인지 판별해야 하므로 많은 시간이 소요된다

에라토스테네스의 체

위와 같은 상황에 에라토스테네스의 체를 활용하면 효율적으로 n개의 수가 각각 소수인지 판별할 수 있다.
그렇다면 에라토스테네스의 체란?
2부터 Root(N)이하의 수까지 자기 자신을 제외한 배수를 모두 제외시키는 방법이다
2를 제외하고 2의 배수인 2, 4, 6 … n-1 or n
3을 제외하고 3의 배수인 3, 6, 9 … n-2 or n-1 or n
이렇게 지우고 남은 수는 소수가 되는 것이다.
public class PrimeNumber { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println(N을 입력하세요.(3이상)"); int N = scanner.nextInt(); boolean[] prime = new boolean[N + 1]; //boolean의 기본값은 false 이고 0과 1은 true로 미리 지정한다. prime[0] = true; prime[1] = true; for (int i = 2; i * i <= N; i++) {//N의 제곱근까지 for (int j = i * i; j <= N; j += i){//자기 자신 제외 //i*i로 시작한 j는 i만큼 더하여 증가하기 때문에, j는 N보다 작은 i의 배수가 될 것. //boolean의 기본값은 false 이기 때문에 배수에 속하는 것들을 true로 지정 prime[j] = true; } } //false인 소수 출력 for (int i = 2; i <= N; i++) { if (!prime[i]) { System.out.println(i); } } } }
Java
복사

김상호

이가현

임학준

조국현