Project Euler 9 연산 결과 유지

1661 단어 ProjectEuler파이썬
피타고라스 수 (피타고라스의 정리를 만족시키는 자연수)는 a
a2 + b2 = c2
예를 들어, 32 + 42 = 9 + 16 = 25 = 52입니다.

a + b + c = 1000 인 피타고라스의 세 세트가 하나만 있습니다.
이 제품 abc를 계산하십시오.
ㅡㅡㅡ//오…사쿠라. 네. jp/p로지ぇc테우ぇr/그리고 x. php? cmd=레아 d&파게=P로 bぇm% 209

우선은 솔직하게 써 보았다.
def cof1():
  target=1000
  (a,b,c) = (1, 1, target - 2)
  ans = 0
  while a < c:
    while b < c:
      if a**2 + b**2 == c**2:
        ans = a*b*c
        break
      (b,c) = (b + 1, c - 1)
    if ans:
      break
    else:
      (a,b,c) = (a + 1, a + 1, target - a*2 -2)
  #print ans

다시 검토하여 매번 a, b, c의 제곱을 계산하는 것은 비효율적이라고 생각했습니다.


그래서 미리 1에서 999 각각의 제곱의 list를 작성해, 그것을 참조하도록 해 보았다.
def cof2():
  target=1000
  sq = [x**2 for x in range(0,target)] #create 
  (a,b,c) = (1, 1, target - 2)
  ans = 0
  while a < c:
    while b < c:
      if sq[a] + sq[b] == sq[c]:
        ans = a*b*c
        break
      (b,c) = (b + 1, c - 1)
    if ans:
      break
    else:
      (a,b,c) = (a + 1, a + 1, target - a*2 -2)
  #print ans

결과, 1회당 3.9밀리초(하기는 100회 실행)를 삭감할 수 있었다.

좋은 웹페이지 즐겨찾기