임의의 두 수를 입력받아 작은 수에서 큰 수 까지의 소수(Prime Number) 출력
- 소수 (Prime Number) : 1과 자기 자신을 제외하고 약수가 없는 수
처리 조건
- 한 줄에 소수를 10개씩 출력한다.
- 마지막에 총 소수의 개수를 출력한다.
출력 결과
내가 쓴 코드
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]);
}
}
🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.
댓글남기기