어떤 정수의 모든 약수 중 자신을 제외한 약수를 모두 합하면 자신과 같아지는 수가 있다.
예를 들어 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+"개 입니다.");
}
}
'JAVA > 알고리즘 예제' 카테고리의 다른 글
[JAVA] 5자리 2진수의 보수 구하기 (0) | 2016.09.14 |
---|---|
[JAVA] 최대공약수, 최소공배수 계산 문제 (0) | 2016.09.14 |
[JAVA] 소수의 개수 구하기 (2) | 2016.09.07 |
[JAVA] 행렬 변환 (1) | 2016.09.06 |
[JAVA] 진법 변환(Radix Transformation) (1) | 2016.09.06 |