알고리즘,손코딩 문제

프로젝트 오일러 문제 21 : 10000 이하의 친화수를 모두 찾아서 그 합을 구하세요.

알통몬_ 2017. 3. 11. 21:10
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

n의 약수들 중에서 자신을 제외한 것의 합을 d(n)으로 정의했을 때,

       서로 다른 두 정수 a,b에 대하여 d(a) = b 이고 d(b) =a 이면 

       a,b 는 친화쌍이라고 하고 a와 b 를 각각 친화수(우애수)라고 합니다.

       예를 들어 220의 약수는 자신을 제외하면 1,2,4,5,10,20,22,44,55,100이므로 

       그 합은 d(220) = 284입니다. 또 284의 약수는 자신을 제외하면 1,2,4,71,142 이므로

       d(284) = 220 입니다.

       10000 이하의 친화수들을 모두 찾아서 그 합을 구하세요.



public class Question {


public static void main(String[] args) {

int[] nums = new int[9999];

int sum = 0;

int[] intArr = new int[9999];

for(int a = 0; a<nums.length; a++){

nums[a] = a+2;

}

int total = 0;

for(int b = 0; b<nums.length; b++){

sum = 0;

for (int i = 1; i < nums[b]; i++) {

if (nums[b] % i == 0) {

sum += i;

}

}

intArr[b] = sum;

}

int count = 0;

for(int j = 0; j<intArr.length; j++){

for(int k = 0; k<nums.length; k++){

if( intArr[j]==nums[k] && intArr[k]==nums[j] && nums[k] != intArr[k]){

count ++;

System.out.println((j+2) + " :" + nums[k] + ":" + count);

total += nums[k];

}

}

}

System.out.println("total : " +total);

}

}

반응형