Problem #033
$a+b+c$, $ab+bc+ca$, $abc$가 이 순서대로 등차수열이 되게 하는 양의 정수 순서쌍 $(a,\,b,\,c)$를 모두 구하여라. (단, $1 \leq a \leq b \leq c$.)
위 문제에 대한 증명은 http://jjycjnmath.tistory.com/411에서 확인할 수 있다. 문제를 보니 간단하게 Matlab으로 답을 확인할 수 있을거 같아서 코드를 짜 보았다. 문제의 답을 이미 알고 있었기 때문에, $a,\,b,\,c$의 최댓값을 모두 $30$으로 두었다.
for a = 1:30
for b = a:30
for c = b:30
% 주어진 순서쌍 (a, b, c)가 문제의 조건을 만족하면 출력
if 2*(a*b + b*c + c*a) == a + b + c + a*b*c
fprintf('(a, b, c) = (%d, %d, %d) \n', a, b, c);
end
end
end
end
위 코드를 실행하면
(a, b, c) = (3, 6, 27)
(a, b, c) = (3, 7, 16)
(a, b, c) = (4, 4, 24)
로 간단히 답을 확인할 수 있다.
혹시 $(a,\,b,\,c)$가 $a \leq b \leq c$를 만족하는 임의의 정수 순서쌍이면 (즉, 양의 정수라는 조건을 없애면) 답이 어떻게 변할지 궁금하여 코드를 약간 수정해서 (for 반복문의 첫 부분에서 a가 -30 부터 30 까지 반복하는 것으로 수정) 다시 실행을 해 보니
(a, b, c) = (-17, 3, 4)
(a, b, c) = (-6, 3, 3)
(a, b, c) = (-3, -2, 1)
(a, b, c) = (0, 0, 0)
(a, b, c) = (0, 1, 1)
(a, b, c) = (3, 6, 27)
(a, b, c) = (3, 7, 16)
(a, b, c) = (4, 4, 24)
가 되어 총 여덟개의 순서쌍이 주어진 조건을 만족함을 알 수 있다. 물론 이 여덟개의 순서쌍이 진짜 전부인지는 증명을 해 보아야 하지만, 생략하도록 하자.
'Others > Matlab' 카테고리의 다른 글
카프리카 수(Kaprekar number) (0) | 2017.07.01 |
---|---|
1 부터 9 까지의 숫자를 이용하여 1 부터 1000 만들기 [Matlab 코드] (0) | 2016.09.02 |
1 부터 9 까지의 숫자를 이용하여 100 만들기 [Matlab 코드] (0) | 2016.09.02 |
[해답] 특별한 10자리 숫자 (Matlab 코드) (0) | 2016.08.10 |
Problems and Solutions #006 [Matlab 코드] (0) | 2016.08.03 |