Tuesday, April 14, 2015

Project Euler #1

1000 미만의 3이나 5의 배수의 합을 계산

가장 나이브한 방법은 1부터 999까지 하나씩 3이나 5의 배수인지 체크하면서 더하는 것입니다.

sm = 0  
for i in range(1,1000):  
  if i % 3 == 0 or i % 5 == 0:  
    sm += i  
   
print sm  


1000미만의 3의 배수를 모두 더하면, 3+6+9+...+999 = 3*(1+2+...+333) = 3*333*334/2 을 이용해서 다음과 같이 계산할 수도 있습니다.

def sm1000(n):  
  m = 999/n  
  return n*m*(m+1)/2  
   
print sm1000(3)+sm1000(5)-sm1000(15)  

제 개발환경에서 첫번째 코드는 대략 4/10,000초, 두번째 코드는 4/100,000초가 걸립니다.

-끝-

No comments: