되는대로 살자

[C언어 기출문제&풀이] 정보올림피아드 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 정보올림피아드

malu 2010. 11. 1. 19:36

220의 약수 중 220을 제외한 약수의 합은 284이고, 284의 약수 중 284를 제외한 약수의 합은 220이다. 이렇게 자신을 제외한 약수의 합이 상대와 같은 한 쌍의 자연수를 '우정수'라고 한다.
다음은 두 자연수 a,b가 '우정수'의 관계인지를 구하는 프로그램의 일부이다. 함수 f(x)가 x의 모든 약수의 합을 구하는 함수일 때 빈칸에 들어갈 내용으로 가장 알맞은 것은?

if ([     ]) printf("%d와(과) %d은(는) 우정수이다.\n",a,b);
else printf("%d와(과) %d은(는) 우정수가 아니다.\n",a,b);

풀이
자신을 제외한 약수의 합 = f(x)-x
따라서 a를 제외한 약수의 합 = f(a)-a
           b를 제외한 약수의 합 = f(b)-b
문제의 조건은 f(a)-a=b 이고 f(b)-b=a 이여야 한다.

따라서 f(a)-a==b&&f(b)-b==a