首页 > 解决方案 > 毕达哥拉斯三元组与 python

问题描述

我想得到一个数字'n'并产生毕达哥拉斯三元组,它们的总数等于'n'。

例如,对于 n=12,我的输出是 3、4、5 (12 = 3 + 4 + 5)。

我写了下面的代码,但是大数字需要很多时间。请帮助我改进它。

a = int(input())
done = False
for i in range(int(a/4)+1,2,-1):
    if done:
        break
    for j in range(i+1,int(a/2)+1):
        k = a-(i+j)
        if k <= j:
            break
        if i**2 + j**2 == k**2:
            print(i,j,k)
            done = True
            break
if done == False:
    print('Impossible')

标签: pythonoptimizationpythagorean

解决方案


此代码可以帮助您

limits = int(input())
c, m = 0, 2

# Limiting c would limit  
# all a, b and c 
while c < limits : 

    # Now loop on n from 1 to m-1 
    for n in range(1, m) : 
        a = m * m - n * n 
        b = 2 * m * n 
        c = m * m + n * n 

        # if c is greater than 
        # limit then break it 
        if c > limits : 
            break

        if a+b+c == limits:
            print(a, b, c) 

    m = m + 1

>> 12
>> 3 4 5

推荐阅读