You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何有序遍历i、j值以避免毕达哥拉斯三元组重复?

解决毕达哥拉斯三元组重复输出问题

问题根源

你的代码中i和j均从1到30完整遍历,由于加法交换律i² + j² = j² + i²,导致同一组三元组会以(i,j,k)和(j,i,k)两种形式重复输出。

解决方案:限制j的遍历范围

只需要让j的起始值等于当前的i,保证i ≤ j,就能避免顺序颠倒的重复。修改后的代码如下:

for i in range(1, 31):
    # 让j从i开始遍历,确保i <= j,消除顺序重复
    for j in range(i, 31):
        for k in range(1, 31):
            if i**2 + j**2 == k**2:
                print(i, ",", j, ",", k)

优化版本(减少无效循环)

考虑到k必然大于j(因为i ≥ 1,所以k² = i² + j² > j²,即k > j),可以直接让k从j+1开始遍历,减少不必要的循环次数:

for i in range(1, 31):
    for j in range(i, 31):
        # k从j+1开始,避免无效遍历
        for k in range(j+1, 31):
            if i**2 + j**2 == k**2:
                print(i, ",", j, ",", k)

修改后的输出结果

3 , 4 , 5
5 , 12 , 13
6 , 8 , 10
7 , 24 , 25
8 , 15 , 17
9 , 12 , 15
10 , 24 , 26
12 , 16 , 20
15 , 20 , 25
18 , 24 , 30
20 , 21 , 29

内容的提问来源于stack exchange,提问作者Nishit Barbhaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:45:46