임의의 두 수를 입력받아 작은 수에서 큰 수 까지의 소수(Prime Number) 출력

  • 소수 (Prime Number) : 1과 자기 자신을 제외하고 약수가 없는 수

처리 조건

  1. 한 줄에 소수를 10개씩 출력한다.
  2. 마지막에 총 소수의 개수를 출력한다.

출력 결과

내가 쓴 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.Scanner;

public class TestPrimeNumber {
 public static void main(String[] args) {

  Scanner n = new Scanner(System.in);
  int num1, num2, num;
  int allcount = 0, sum = 0;
  
  System.out.println("첫번째 숫자 입력 => ");
  num1 = n.nextInt();
  System.out.println("두번째 숫자 입력 => ");
  num2 = n.nextInt();
  System.out.println();
  
  if(num1 > num2) 
  {
   num = num1;
   num1 = num2;
   num2 = num;
  }

  for(int i = num1; i <= num2; i++) 
  {
    int count = 0; //for 문 돌리고 값 초기화

    for(int j = 2; j <= i; j++)
    {
        if(i % j == 0)
        {
        count++;
        }
    }

    //1과 자기 자신만 나누어 떨어진 횟수 1회
    if(count == 1) 
    {
        allcount++;
        sum += i;
        System.out.printf("%3d  ", i);
        if (allcount % 10 == 0) {
        System.out.println();
        }
    }

  }
  
  System.out.println();
  System.out.println();
  System.out.printf("총소수의 갯수 = %d", allcount);
  System.out.println();
  System.out.printf("총 소수의 합 = %d", sum);
  
 }
}

다른 답안 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.Scanner;

public class PrimeNumber {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Scanner n = new Scanner(System.in);
  int num1, num2, min, max, cnt = 0;
  int i, j;
  int hap = 0;
  
  System.out.println("첫번째 숫자 입력 => ");
  num1 = n.nextInt();
  System.out.println("두번째 숫자 입력 => ");
  num2 = n.nextInt();
  System.out.println();
  
  if(num1 < num2) {
   min = num1;
   max = num2;
  } else {
   min = num2;
   max = num1;
  }
  
  for (i = min; i <= max; i++) //소수를 계산하는 부분
  {
    for(j = 2; j < i; j++)
    {
        if(i%j == 0)
        break; //i 변수의  값은 더 이상 소수가 아님
    }
    
    if(i == j) //i 변수의 값이 소수인 경우
    {
        System.out.printf("%5d", i); // 소수 출력
        cnt++;
        if(cnt % 10 == 0) // 한 줄에 10개씩
        System.out.println();
        hap += i; // 소수의 합
    }
  } //소수 계산 끝
  
  if(cnt % 10 != 0)
  // 소수 출력 후 마지막 줄이 10배수의 갯수가 아니어도 줄바꿈
   System.out.println(); 
  
  System.out.println("총 소수의 갯수 = "+ cnt);
  System.out.println("총 소수 합 = "+ hap);
  
 }
}

작성한 코드를 정적 메서드로 재구성하기

내가 쓴 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.util.Scanner;

public class TestPrimeNumber2 {

 public static void main(String[] args) {
  int res[] = input_num();
  int res2[] = print_prime(res);
  print_total(res2);
 }

 //메서드 1
 static int[] input_num() {
  Scanner in = new Scanner(System.in);
  int num1, num2;
  int val[] = new int[2]; // 작은 수와 큰 수를 저장할 배열
    
  System.out.println("첫번째 숫자 입력 => ");
  num1 = in.nextInt();
  System.out.println("두번째 숫자 입력 => ");
  num2 = in.nextInt();
  System.out.println();
    
  if(num1 < num2) {
   val[0] = num1;
   val[1] = num2;
  } else {
   val[0] = num2;
   val[1] = num1;
  }
  return val;
 }
 
 static int[] print_prime(int val[]) {
  int val2[] = new int[2];
  int cnt = 0;
  int hap = 0;
  int i, j;
  
  for (i = val[0]; i <= val[1]; i++) //소수를 계산하는 부분
  {
   for(j = 2; j < i; j++)
   {
    if(i%j == 0)
     break; //i 변수의  값은 더 이상 소수가 아님
   }
     
   if(i == j) //i 변수의 값이 소수인 경우
   {
    System.out.printf("%5d", i); // 소수 출력
    cnt++;
    if(cnt % 10 == 0) // 한 줄에 10개씩
     System.out.println();
    hap += i; // 소수의 합
   }
   
  } //소수 계산 끝
  System.out.println();
  val2[0] = cnt;
  val2[1] = hap;
  return val2;
 }
 
 static void print_total(int val2[]) {
  int cnt = val2[0];
  int hap = val2[1];
      
  System.out.println("총 소수의 갯수 = "+ cnt);
  System.out.println("총 소수 합 = "+ hap);  
  
 }
}

다른 답안 코드 (1)

  • 총 합(hap)은 제외한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.util.Scanner;

public class PrimeNumber2 {

 public static void main(String[] args) {
  int res[] = input_num(); //int res[];  res = input_num();
  //int res[]  : 배열 객체의 주소를 보관할 수 있는 레퍼런스를 생성한다 
  //함수호출 : input_num();
  //print_prime(res); //(아래 코드에서 소수가 출력되므로 삭제)
  //메인 메소드로 복귀하면 메서드1에있는 변수값은 사라진다.
  //res[] 에 전달된 주소값만 남게 된다.  
  int cnt = process_primenumber(res);
  print_cnt(cnt);
 }

 //메서드 1
 static int[] input_num() {
    Scanner in = new Scanner(System.in);
    int num1, num2;
    int val[] = new int[2]; // 작은 수와 큰 수를 저장할 배열
        
    System.out.println("첫번째 숫자 입력 => ");
    num1 = in.nextInt();
    System.out.println("두번째 숫자 입력 => ");
    num2 = in.nextInt();
    System.out.println();
    
    if(num1 < num2) {
    val[0] = num1;
    val[1] = num2;
    } else {
    val[0] = num2;
    val[1] = num1;
    }
    return val; //입력한 값의 "주소"를 반환
 }
 
 
 // 정수형 반환값이 있다(총 횟수, 총 합)
 static int process_primenumber(int val[]) {
    //누적하는 값은 초기값이 필요하다.
    //cnt 는 이 메서드 내에서만 사용하는 지역 변수이다.
    int i, j, cnt = 0; 
    
    for (i = val[0]; i <= val[1]; i++) //소수를 계산하는 부분
    {
    for(j = 2; j < i; j++)
    {
        if(i%j == 0)
        break; //i 변수의  값은 더 이상 소수가 아님
    }
        
    if(i == j) //i 변수의 값이 소수인 경우
    {
        System.out.printf("%5d", i); // 소수 출력
        cnt++;
        if(cnt % 10 == 0) // 한 줄에 10개씩
        System.out.println();
    }
    
    } 
    return cnt;
 }
 
 static void print_cnt(int cnt) {
    if (cnt % 10 != 0)
    System.out.println();
    
    System.out.println();
    System.out.println("총 소수의 갯수 = "+ cnt);
 }
 
}

다른 답안 코드 (2)

  • 총 합까지 배열로 처리해서 출력한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//cnt와 hap 모두 배열로 출력하기

import java.util.Scanner;
public class PrimeNumber2 {

 public static void main(String[] args) {
    //1. 배열을 생성해서 저장
    int res[] = input_num(); //int res[];  res = input_num();
    
    //int res[]  : 배열 객체의 주소를 보관할 수 있는 레퍼런스를 생성한다 
    //함수호출 : input_num();
    //print_prime(res); //(아래 코드에서 소수가 출력되므로 삭제)
    //메인 메소드로 복귀하면 메서드1에있는 변수값은 사라진다.
    //res[] 에 전달된 주소값만 남게 된다.  
    int cnt_hap[] = process_primenumber(res);
    print_cnt(cnt_hap);
 }

 //메서드 1
 static int[] input_num() {
    Scanner in = new Scanner(System.in);
    int num1, num2;
    int val[] = new int[2]; // 작은 수와 큰 수를 저장할 배열
        
    System.out.println("첫번째 숫자 입력 => ");
    num1 = in.nextInt();
    System.out.println("두번째 숫자 입력 => ");
    num2 = in.nextInt();
    System.out.println();
        
    if(num1 < num2) {
    val[0] = num1;
    val[1] = num2;
    } else {
    val[0] = num2;
    val[1] = num1;
    }
    return val; //입력한 값의 "주소"를 반환
 }

 // 정수형 반환값이 있다(총 횟수, 총 합)
 static int[] process_primenumber(int val[]) {
    //누적하는 값은 초기값이 필요하다.
    //cnt 는 이 메서드 내에서만 사용하는 지역 변수이다.
    int i, j; 
    int cnt_hap[] = new int[2];
    
    for (i = val[0]; i <= val[1]; i++) //소수를 계산하는 부분
    {
    for(j = 2; j < i; j++)
    {
        if(i%j == 0)
        break; //i 변수의  값은 더 이상 소수가 아님
    }
        
    if(i == j) //i 변수의 값이 소수인 경우
    {
        System.out.printf("%5d", i); // 소수 출력
        cnt_hap[0]++;
        if(cnt_hap[0] % 10 == 0) // 한 줄에 10개씩
        System.out.println();
        cnt_hap[1] += i;
    }
    
    } 
    return cnt_hap;
 }

 static void print_cnt(int cnt_hap[]) {
    if (cnt_hap[0] % 10 != 0)
    System.out.println();
    
    System.out.println();
    System.out.println("총 소수의 갯수 = "+ cnt_hap[0]);
    System.out.println("총 소수 합 = "+ cnt_hap[1]);
 }

}

🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.

태그:

카테고리:

업데이트:

댓글남기기