본문 바로가기

JAVA/알고리즘 예제

[JAVA] 약수(Divisor) 관련 문제

어떤 정수의 모든 약수 중 자신을 제외한 약수를 모두 합하면 자신과 같아지는 수가 있다.


예를 들어 6의 약수 1,2,3,6 중 6을 제외한 1, 2, 3 을 더하면 6이 되어 자신과 같아 진다.


4~1000까지 이러한 수를 찾아 출력하고, 그 개수를 출력하는 알고리즘을 만들어보자.


실행 결과



package jungbo;


public class P109Divisor {

public static void main(String[] args) {

int LM = 0; //조건을 만족하는 수를 찾으면 횟수를 센다.

int N;  //4부터 1000까지 조건을 만족하는지 확인할 숫자

int sum;  //약수들의 합을 저장할 변수

int K,J,R;  //K : N의 가장 큰 약수를 저장할 변수. J : 약수인지 판별할 변수 R : 나머지를 저장할 변수

System.out.println("조건을 만족하는 수는");

for(N=4;N<=1000;N++){

sum = 0;

K = N/2;  //N의 가장 큰 약수를 K에 저장한다

for(J=1;J<=K;J++){

R = N%J;  //N을 J로 나눈 나머지를 구해 R에 대입한다

if(R==0){  //나머지가 0이라면 약수이므로

sum = sum + J;  //sum에 누적시킨다

}

}

if(N == sum){  //약수의 합과 자기자신이 같으면

System.out.println(N);  //출력하고

LM++;  //횟수를 증가시킨다

}

}

System.out.println("총 "+LM+"개 입니다.");

}

}