문제
자연수n,m이 주어질 때, n부터m까지 존재하는 소수를 모두 출력하는 프로그램을 작성하여라. 여기서 소수란, 약수가 1과 자기자신밖에 존재하지 않는 수를 말한다.
입력
첫째 줄에 자연수 n, m이 주어진다. (1≤n,m≤20,000)
출력
첫째 줄에 n부터m까지 존재하는 소수를 모두 출력한다.
예제 입력
1 10
예제 출력
2 3 5 7
예제 입력
13 30
예제 출력
13 17 19 23 29
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// Please Enter Your Code Here
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // 시작 수
int b = sc.nextInt(); // 끝 수
int count = 0; // 나눠지는 수가 있는지 카운트
for(int i=a;i<=b;i++){ // 2 부터 끝수까지
for(int j=2;j<=b;j++){ // 첫 수 부터 끝수까지
if(i%j ==0){ //나눠지는 수 가 있으면
count++; // count +1
}
}
if(count ==1){ // 나눠지는 수가 자기 자신밖에 없으면
System.out.print(i+ " "); // i값 출력
count =0 ; // count 초기화
}else{ // 그렇지 않으면
count =0 ; //그냥 count 초기화
}
}
}
}
다른 코드
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// Please Enter Your Code Here
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String answer ="";
int count =0;
if(b>2 &&a>=2){
for(int i =a;i<b;i++){
for(int j=2;j<i;j++){
if(i%j==0){
count ++ ;
}
}
if(count<1){
answer += i+ " ";
}
count =0;
}
}else{
for(int i =2;i<=b;i++){
for(int j=2;j<i;j++){
if(i%j==0){
count ++ ;
}
}
if(count<1){
answer += i+ " ";
}
count =0;
}
}
System.out.println(answer);
}
}
후기 - 첫번째 코드랑 다르게 두번째는 for 문에서 j 값을 i로 제한하므로 효율면에서 더 좋다 또한 1은 1과 자기 자신밖에 나눠지지 않지만 수학적 정의로 보면 소수가 아니므로 1~2 까지의 조건을 따로 뺴서 처리해 줬으므로 2번 코드가 정확성 면에서도 더 좋다고 할 수 있다