[英]My code works only when the input is below 31 [ProjectEuler100] problem #10-Summation of primes
[英]projecteuler problem 8 - unsure on what is wrong with my code
畢達哥拉斯三元組是一組三個自然數,a < b < c,其中,
a^2 + b^2 = c^2
例如,
3^2 + 4^2 = 9 + 16 = 25 = 5^2.
恰好存在一個 a + b + c = 1000 的畢達哥拉斯三元組。求積
abc
。
以上是問題。 當我運行我的代碼時,它可以正常工作並按照我的預期運行,但是程序總是在沒有找到答案的情況下完成。 任何有關如何改進我的代碼的建議將不勝感激。
for k in range (1,1000):
c = 1000 - k
for i in range (1,c):
b = c - i
c_sqr = c ** 2
b_sqr = b ** 2
a = c - b
a_sqr = a ** 2
if a_sqr + b_sqr == c_sqr:
if a + b + c == 1000:
product = a * b * c
print(f"{product} is the answer")
exit()
else:
print("Pythagorean triplet!")
else:
josephmama = 11
print("not a pythagorean triplet")
在您的代碼中c < 1000
和a + b == c
是不變量。 sum (a + b + c) == 2 * c
要求直角三角形的最長邊(斜邊)與其他邊的總和一樣長,並且沒有這樣的數字可以滿足它,所以if
身體從不執行。
for a in range(1, 1000):
for b in range(1, 1000):
c = 1000 - (a + b)
if (a ** 2 + b ** 2 == c ** 2):
print(a * b * c)
exit()
a 並不總是等於 c - b
通過從 c 和 a 從 c 和 b 導出 b,您不必要地限制了 b 和 a 的選項。 只需遍歷 a、b 和 c 的所有組合,添加您擁有的約束,您最終會得到您的三元組。
for a in range(1, 1000):
for b in range(1, 1000):
for c in range(1, 1000):
if a+b+c == 1000:
if a**2+b**2 == c**2:
if a < b:
if b < c:
print(f"My Triplet: a: {a}, b: {b}, c:{c}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.