세 자연수 a, b, c 가 피타고라스 정리 a² + b² = c² 를 만족하면 피타고라스 수라고 부릅니다 (여기서 a < b < c ).
예를 들면 32 + 42 = 9 + 16 = 25 = 52이므로 3, 4, 5는 피타고라스 수입니다.
a + b + c = 1000 인 피타고라스 수 a, b, c는 한 가지 뿐입니다. 이 때, a × b × c 는 얼마입니까?
Click
예를 들면 32 + 42 = 9 + 16 = 25 = 52이므로 3, 4, 5는 피타고라스 수입니다.
a + b + c = 1000 인 피타고라스 수 a, b, c는 한 가지 뿐입니다. 이 때, a × b × c 는 얼마입니까?
상당히 많은 고민을 하였습니다.
그냥 생각하면 미지수가 a,b,c 3개이기 때문에 이중 loop로 푸는게 단순하고...
실제 그렇게 푼 분들도 많은 것 같지만....
변수를 하나 줄여 1개의 loop로 해결.
a + b + c = n 에서.
b + c = n - a
b = (n - a) - c
n-a -> t로 놓으면... -> b = t - c
피타고라스 정리에 넣으면..
a ² + b ² = c ² 는
a ² + (t-c) ² = c²
a ² + t ² - 2*t + c ² = c²
a ² + t ² = 2*t*c
( a ² + t ² ) / (2*t) = c
여기서 t = n-a 이므로...
주어진 n에서 a만 알면, c와 b를 구할 수 있다.
라는 과정을 거쳤습니다.b + c = n - a
b = (n - a) - c
n-a -> t로 놓으면... -> b = t - c
피타고라스 정리에 넣으면..
a ² + b ² = c ² 는
a ² + (t-c) ² = c²
a ² + t ² - 2*t + c ² = c²
a ² + t ² = 2*t*c
( a ² + t ² ) / (2*t) = c
여기서 t = n-a 이므로...
주어진 n에서 a만 알면, c와 b를 구할 수 있다.
그리고 이걸 코드로 옮기면...
<script> function p009(n){ var a, b, c; for(var i=1; i<n; i++) { a = i; var t = n-i; c = parseInt((a*a + t*t) / (2*t)); b = n - a - c; if(a*a + b*b == c*c) break; } return a*b*c; } </script>간단하게 정리.
댓글 없음:
댓글 쓰기