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

如何遍历多参数组合调用euler函数寻找五次方等式匹配解?

问题与解决方案

问题描述

现有如下Python函数:

def euler(a,b,c,d):
    my_dict = {'A1':[],'A2':[],'A3':[],'A4':[],'Number': []}
    y = a**5 + b**5 + c**5 + d**5
    for n in range(140,161):
        if n**5 == y:
            my_dict['A1'].append(a)
            my_dict['A2'].append(b)
            my_dict['A3'].append(c)
            my_dict['A4'].append(d)
            my_dict["Number"].append(n)
            return my_dict  
        else:
            pass

该函数接收参数a、b、c、d,计算y = a⁵ + b⁵ + c⁵ + d⁵,判断是否存在n∈[140,160]使得n⁵ = y,若存在则返回记录参数与n的字典。

需求:遍历a(20至40)、b(80至100)、c(100至120)、d(120至140)的所有参数组合,调用该函数找到符合条件的匹配。

实现方案

方法1:嵌套for循环

直接通过四层嵌套循环遍历所有参数组合,调用euler函数并收集结果:

# 保留原euler函数
def euler(a,b,c,d):
    my_dict = {'A1':[],'A2':[],'A3':[],'A4':[],'Number': []}
    y = a**5 + b**5 + c**5 + d**5
    for n in range(140,161):
        if n**5 == y:
            my_dict['A1'].append(a)
            my_dict['A2'].append(b)
            my_dict['A3'].append(c)
            my_dict['A4'].append(d)
            my_dict["Number"].append(n)
            return my_dict  
        else:
            pass

# 遍历所有参数组合
result = None
for a in range(20, 41):
    for b in range(80, 101):
        for c in range(100, 121):
            for d in range(120, 141):
                current = euler(a, b, c, d)
                if current is not None:
                    result = current
                    # 找到结果后提前终止所有循环
                    break
            if result is not None:
                break
        if result is not None:
            break
    if result is not None:
        break

# 输出结果
if result:
    print("找到匹配:")
    print(result)
else:
    print("未找到符合条件的匹配")

方法2:使用itertools.product简化循环

借助itertools.product生成所有参数组合,避免多层嵌套,代码更简洁:

import itertools

# 保留原euler函数
def euler(a,b,c,d):
    my_dict = {'A1':[],'A2':[],'A3':[],'A4':[],'Number': []}
    y = a**5 + b**5 + c**5 + d**5
    for n in range(140,161):
        if n**5 == y:
            my_dict['A1'].append(a)
            my_dict['A2'].append(b)
            my_dict['A3'].append(c)
            my_dict['A4'].append(d)
            my_dict["Number"].append(n)
            return my_dict  
        else:
            pass

# 生成所有参数组合
params = itertools.product(
    range(20, 41),
    range(80, 101),
    range(100, 121),
    range(120, 141)
)

# 遍历组合并查找结果
result = None
for a, b, c, d in params:
    current = euler(a, b, c, d)
    if current is not None:
        result = current
        break

# 输出结果
if result:
    print("找到匹配:")
    print(result)
else:
    print("未找到符合条件的匹配")

函数优化建议

原euler函数循环遍历n的方式效率较低,由于5次方是严格单调递增的,可直接计算y的5次方根,判断是否为整数且在[140,160]范围内,优化后的函数如下:

def euler_optimized(a,b,c,d):
    my_dict = {'A1':[],'A2':[],'A3':[],'A4':[],'Number': []}
    y = a**5 + b**5 + c**5 + d**5
    # 计算5次方根并取整,验证是否符合条件
    n = round(y ** (1/5))
    if 140 <= n <= 160 and n**5 == y:
        my_dict['A1'].append(a)
        my_dict['A2'].append(b)
        my_dict['A3'].append(c)
        my_dict['A4'].append(d)
        my_dict["Number"].append(n)
        return my_dict
    return None

使用优化后的函数可减少循环次数,提升整体运行效率。


内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:20:35