Problems and Solutions #033 [Matlab 코드]

written by jjycjn   2017. 7. 1. 00:47

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)

가 되어 총 여덟개의 순서쌍이 주어진 조건을 만족함을 알 수 있다. 물론 이 여덟개의 순서쌍이 진짜 전부인지는 증명을 해 보아야 하지만, 생략하도록 하자.

  ::  
  • 공유하기  ::