Study/Java

[for문] 자바 약수 구하기

토기발 2022. 3. 15. 16:12

임의의 수를 입력받아 그 수의 약수를 구하는 프로그램을 만들겠습니다.

사실 저는 약수가 뭔지 잊어버려서 검색을 했다는 슬픈 이야기가 있는데요.

이정도면 초등수학부터 다시 시작해야 하는게 아닐까.

 

혹시 저처럼 약수를 잊은 분들을 위해 :

약수란 어떤 수를 나누어 떨어지게 하는 수를 그 수의 약수라고 합니다.

두 정수 a, b에 대하여 b=ac를 만족하는 정수c가 존재한다면, a를 b의 약수라고 합니다.

이번 코드에서는 나누었을 때 0이 되는 숫자=약수 로 계산했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
public class TestFor02 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("임의의 수를 입력하세요: ");
        int su = in.nextInt();
        
        System.out.print( su + "의 약수 : ");
        for(int i=1; i<=su; ++i) {
            if(su%i == 0) {
                System.out.print(i + ", ");
            }
        }
    }
}
cs

 

키보드로 숫자를 입력받기 때문에 Scanner 클래스를 사용합니다.

입력값은 su 변수에 받았습니다.

for(int i=1; i<=su; ++i) 

 1부터 시작해서 su(입력받은 수)까지 1씩 커지도록 for문을 돌리는데,

if(su%i == 0)

 su를 나누었을 때 0이 되는 i들을

System.out.print(i + ", "); 로 모두 출력합니다.

마지막 쉼표가 거슬리는데

출력이 잘 되었네요.

 

만약 약수의 개수까지 구하고자 한다면?

1
2
3
4
5
6
7
8
9
10
11
12
13
        int su = in.nextInt();
        int co = 0;
        System.out.print( su + "의 약수 : ");
        for(int i=1; i<=su; ++i) {
            if(su%i == 0) {
                ++co;
                System.out.print(i + ", ");
                
            }
        }
        System.out.print("약수의 개수: " + co);
    }
}
cs

개수를 카운트하는 co변수를 추가하고

if 조건에 맞는 약수가 생길 때마다 co가 하나씩 늘어나게 설정합니다.

System.out.print("약수의 개수: " + co);

로 출력합니다.

 

잘 출력되었습니다.