요즘에 주말마다 혹은 시간 날 때마다 Project Euler 에 방문을 합니다.

이 웹페이지에는 200개 넘는 수학 문제가 있습니다. 가입하고 나면 답을 적어 넣을 수 있고, 답을 맞추다면 그 문제에 대한 토론 게시판에 접근할 수 있게 됩니다. 이 토론 게시판에는 어떻게 정답을 풀었는가에 대한 다양한 의견을 볼 수 있게 됩니다.

그럼 문제의 난이도는 어떨지 궁금하지요. 쉬운 문제부터 어려운 문제까지 다양합니다. 다만, 그냥 손으로 풀기는 좀 어렵습니다. 계산기를 써야 할까요? 아닙니다. 반드시 컴퓨터를 사용해야 할 겁니다. 문제는 쉬운데, 손으로 풀기는 어려울만큼 계산량이 필요로 합니다.

예를 들어, 1번 문제를 봅시다.

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

번역을 해 보면 [1000 이하의 수 중에서 모든 3과 5의 배수들의 합을 구하라]는 문제입니다.

물론 손으로 해결할 수 있지만, 프로그램 언어를 이용하거나 수학 도구를 이용한 다면 한 줄에 해결 되겠지요. 저 같이 Maple 을 사용하는 사람이라면 다음과 같이 한 줄로 해결할 수 있습니다.

 > add(i, i in select(x->modp(x,3)=0 or modp(x,5)=0, [$1..1000]));

물론 1000 이하의 3의 배수의 합을 계산하고, 5의 배수의 합을 계산하고, 15의 배수의 합을 계산하여 더하고 빼면 되겠지만.. 이제 다음 문제 부터는 그런 손으로 하는 노가다는 더 이상 힘들겁니다. 그리고 점점 계산량이 많아지기 때문에 효율적인 알고리즘을 만들지 않으면, 문제 해결 시간이 천문학적으로 늘어나더군요.

여기 문제를 풀면서 다른 사람의 풀이를 보니, 조금씩 계산을 위한 프로그램밍이 느는 것 같습니다. 여러분들도 한 번 도전해 보세요.

@ 참고로 제 아이디는 ensual 입니다. 지금 현재 저의 스코어는 66/273 입니다. 한국 참여자 중에서는 61/382 입니다. Maple 사용자 중에서는 24/149 입니다.

'Thoughts > Math' 카테고리의 다른 글

무한 급수  (4) 2010.08.04
피라미드 저울의 눈금 문제  (10) 2010.04.09
IBM Research - Ponder This, 2010년 1월  (2) 2010.01.14
두 개의 행렬  (2) 2009.11.04
재밌는 시외버스 가격  (3) 2009.08.26

+ Recent posts