프로그래밍/백준알고리즘
백준 알고리즘 4948 문제 풀이 (java) - 베르트랑 공준
밍구몬
2019. 7. 24. 16:33
다음은 4948번 문제입니다.
만약, 10이 주어지면 10(n)보다 크고 20(2n)보다는 작거나 같은 소수의 개수를 출력하는 문제입니다.
- 0을 입력받을 때까지 계속하여 입력을 받아야 하기 때문에 while문을 만들어 줍니다.
- 소수인지 아닌지 판단하기 위한 boolean타입의 배열을 n+1크기 만큼 만들어 주고, true로 초기화 해줍니다.
(0과 1은 소수가 아니므로 false로 값 세팅) - 2부터 N까지의 도는 for문을 만들어 줍니다.
- for문안에 j=2부터 j*i는 N과 같거나 작을때 까지 도는 포문을 만들어 줍니다.
(약수가 있다는 것은 소수가 아니기 때문에 2부터 N까지의 배수들을 모두 false로 만들어 줌) - data배열의 ture값 만큼 카운트를 증가해 줍니다.
이렇게 만들어 주면 문제를 풀 수 있습니다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int m=1;
while(true) {
m=s.nextInt();
if (m==0) break;
int n=m*2;
int cnt=0;
boolean[] data= new boolean[n+1];
data[0]=false;data[1]=false;
for(int i=2;i<=n;i++) data[i]=true;
for(int i=2;i<=n;i++)
for(int j=2;j*i<=n;j++)
data[i*j]=false;
for(int i=m+1;i<data.length;i++)
if (data[i]) cnt++;
System.out.println(cnt);
}
}
}