본문 바로가기

Julia

오일러 프로젝트 6번

문제

1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).

1^2 + 2^2 + ... + 10^2 = 385

1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).

(1 + 2 + ... + 10)^2 = 55^2 = 3025

따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.

그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?

 

풀이

문제의 그대를 간단히 계산하면 된다. '차이'를 구하는 것은 큰 값에서 작은 값을 빼면 되는 것인데, 간단히 한쪽에서 다른 한쪽을 뺀 다음 그 절대값을 구하는 것과 같다. 절대값을 구하는 함수는 abs() 이다.

let a = sum(1:100)^2
    b = sum(x^2 for x=1:100)
    abs(a-b) |> println
end

sum() 함수 내부에서는 축약 표현식에 별도의 [...]를 사용하지 않았다. 줄리아에서는 파이썬과 비슷하게 소괄호로 묶인 축약 표현은 제너레이터 표현이며, 역시 파이썬과 마찬가지로 sum()과 같이 반복가능한 객체를 받는 함수에 넘겨주는 것이 가능하다.