python - 毕达哥拉斯三元组与 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')
解决方案
此代码可以帮助您
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
推荐阅读
- javascript - 使用 Array.includes 的一个键检查数组是否包含对象
- c# - 如何从工具条点击事件中调用 Menustrip 项目
- java - 异步调用处理
- case - 根据日期为每个 id 添加序列号
- python - 如何在序列化器中查找元组?
- jquery - 无法在 div 中动态创建 HTML
- svg - 我有一个 path(heart) ,通过添加变换值缩放以减小大小(宽度和高度)。我需要添加和缩放路径的不同宽度
- websphere - IBM Websphere MQ 服务器
- c++ - 将 std::chrono 时间点乘以标量
- java - AdoptOpenJDK 和 Red Hat OpenJDK for Windows 之间的技术差异