Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

Posts List


2012년 2월 18일 토요일

[Project Euler] 9. a + b + c = 1000 이 되는 피타고라스 수

9. a + b + c = 1000 이 되는 피타고라스 수
세 자연수 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

상당히 많은 고민을 하였습니다.
그냥 생각하면 미지수가 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를 구할 수 있다.
라는 과정을 거쳤습니다.
그리고 이걸 코드로 옮기면...
<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>
간단하게 정리.

댓글 없음:

댓글 쓰기