Project Euler 9 연산 결과 유지
1661 단어 ProjectEuler파이썬
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회 실행)를 삭감할 수 있었다.
Reference
이 문제에 관하여(Project Euler 9 연산 결과 유지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cof/items/ef35068f3e63ede66eaf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)