본문 바로가기

Julia

오일러 프로젝트 9번 (Julia)

문제

세 자연수 a, b, c 가 피타고라스 정리 a^2 + b^2 = c^2을 만족하면 피타고라스 수라고 부릅니다.(여기서 \(a < b < c\) ) 예를 들면 \(3^2 + 4^2 = 9 + 16 = 25 = 5^2\)이므로 3,4,5는 피타고라스 수입니다.

a + b + c = 1000 인 피타고라스 수 a, b, c는 한가지 뿐입니다. 이 때, a, b, c는 얼마입니까?

풀이

a < b < c 인 조건을 사용해서 a, b의 범위를 줄이면 간단하게 풀 수 있다. (뿐만 아니라 삼각형의 세 변의 조건을 추가로 적용할 수 있지만 이 문제에서는 큰 영향을 주지 않는다.)

세 변의 길이의 합이 1000으로 고정되어 있고, b는 c보다 작거나 같아야 하고 a는 다시 b보다 작거나 같아야 한다. 즉 a를 생각하지 않는다면 b는 최대 499가 될 수 있기에 이 범위에서 돌려보면 된다.

합이 고정되어 있으므로 a, b에 의해서 c가 결정되며, 피타고라스 정리를 만족하는지만 체크하면된다. 문제에서는 해당하는 케이스가 1개밖에 없다고 하였으므로 발견되면 탐색을 중단하면 된다.

참고로 줄리아에서는 범위를 사용해서 for 순회를 하는 경우에, for x=1:10, y=1:10 과 같은 문법을 사용해서 중첩 for문을 한 줄로 작성할 수 있다. 또 파이썬과 달리, 범위 문법에서 간격을 사용하는 경우, 시작:간격:끝의 형식을 사용함에 유의하자.


@time let p = 1000
  for b=499:-1:2, a=b-1:-1:1
    c = p - a - b
    c^2 == a^2 + b^2 && (println(a*b*c);break)
  end
end