본문 바로가기

백준/알아두면 유용한 것

소수를 구하는 법

반응형

저번에는 Java로 최대공약수와 최소공배수를 구하는 방법에 대해 썼습니다.

이번에는 소수를 구하는 방법에 대해서 글을 써보겠습니다.

소수를 구하는 방법은 많습니다. 저는 그 중에서 많이 알려진 에라토스테네스의 체를 이용하여 구현해보겠습니다.

import java.io.*;
import java.util.*;
public class Main {
    public static boolean[] prime;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int A = Integer.parseInt(br.readLine());

        setPrime(A);

        if(!prime[A]) {
            System.out.println("소수입니다");
        } else {
            System.out.println("소수가 아닙니다");
        }
    }
    public static void setPrime(int A) {

        prime = new boolean[A+1];

        for (int i = 2; i <= Math.sqrt(A); i++) {

            if(prime[i]) {
                continue;
            }

            for (int j = i*i; j < prime.length; j+=i) {
                prime[j] = true;
            }
        }
    }
}

수를 하나 입력 받은 후에 그 수가 소수인지 아닌지를 판별하는 코드입니다. 에라토스테네스 체에 관련한 자세한 풀이가 궁금하시다면 다른 분들의 포스팅을 봐주시길 바랍니다 저도 엄청 자세히는 모르는 내용이라서 ㅎㅎ

 

A 이상 B이하의 소수들을 구하는 구하는 알고리즘이고 이와 관련된 백준 문제도 있어서 그 문제의 풀이 방법을 참고했습니다. 

1929번: 소수 구하기 (acmicpc.net)

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

import java.io.*;
import java.util.*;
public class Main {
    public static boolean[] prime;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int A = Integer.parseInt(br.readLine());
        int B = Integer.parseInt(br.readLine());

        prime = new boolean[B + 1];
        setPrime();
        for (int i = A; i <= B; i++) {

            if(!prime[i]) {
                System.out.println(i);
            }
        }

    }
    public static void setPrime() {


        prime[0] = prime[1] = true;


        for (int i = 2; i <= Math.sqrt(prime.length); i++) {

            if(prime[i]) {
                continue;
            }
            for (int j = i*i; j < prime.length; j+=i) {
                prime[j] = true;
            }
        }
    }
}

 

반응형

'백준 > 알아두면 유용한 것' 카테고리의 다른 글

JAVA substring (간단히)  (0) 2022.08.29
자바 Stringtokenizer 사용법  (0) 2022.08.22
최대공약수 최소공배수  (0) 2022.08.19