본문 바로가기

코딩 테스트/Project Euler @ kr

21) 10000 이하 모든 친화수(우애수)의 합은?

반응형

http://euler.synap.co.kr/prob_detail.php?id=21


추가 조건 : d(a)=a 처럼 a=b일 경우는 친화수(우애수)가 아닙니다.


Skillist 코드---------------------------------------------------------------------------------


public static void main(String[] args){

int totalsum=0;

for(int i=3;i<=10000;i++){

int temp = Calsum(i);

if(temp<=10000){

if(Calsum(temp) == i && temp != i){

totalsum += i;

}

}

}

System.out.println(totalsum);

}

public static int Calsum(int i){

int sum = 1;

int number = i;

for(int j=2; j < i;j++){

if(number%j==0){

i = (number/j);

sum = sum + j + i;

}

}

return sum;

}


다시 공부------------------------------------------------------------------

//제곱수일 경우 그에대한 약수 합 계산을 올바르게 수행.

//i=1일 경우 0으로 세팅

public static void main(String[] arg){

int sum=0;

for(int i=2; i<=10000;i++){

int first = cal(i);

if(first<=10000 && i==cal(first) && i!=first){

sum += i;

}

}

System.out.println(sum);

}

public static int cal(int n){

int temp = n;

int sum;

if(n==1){

sum=0;

}else{

sum=1;

for(int i=2; i<temp;i++){

if(n%i==0){

sum+=i;

if(n!=i*i){

sum+=(n/i);

}

temp =n/i;

}

}

}

return sum;

}

반응형