在给定范围内寻找 a^3+b^3=c^3+d^3

题目要求:

Srinivasa Ramanujan是一个因他在数字上的天分而出名的印度数学家。有一天,英国数学家G.H.Hardy来拜访他,Hardy提到自己乘坐的出租车标有一个相当无聊的数字1729。Ramanujan 当即回答道,“不,Hardy!不,Hardy!这是一个非常有趣的数字!”。Ramanujan说:“对1729这个数字,存在2组不同的数,且每组只有2个数值,每一组数值的立方和等于1729,且1729是能够被两组不同的数按上述条件表达的数中最小的那个!”。

请在指定位置完成函数编写,验证这句话是否正确。程序将整数N作为输入,按一定格式返回所有能够被上述方法表示的小于或等于N的整数。换句话说,就是找到4个不同的正整数a、 b、 c、 d 且 a3+b3=c3+d3
。(提示:用4个嵌套循环)。

题目解读:

给定一个范围,求出范围内所有满足a3+b3=c3+d3的数
比如:输入10000,找到两个满足要求的数据在这里插入图片描述

函数部分

代码可能有待修改
def ramanujan(n):
    results = []
    a=1
    b=1
    c=1
    d=1
    while True:#第一层循环,用来控制a,防止超出查找范围
        if(a**3>n):
            break 
        else:
            b=a+1
            while True:#第二次循环,用来控制a^3+b^3的范围
                x=a**3+b**3
                if x>n:
                    break
                else:
                    c=a+1
                    while True:
                        if c**3>x:#缩小控制范围,减少时间复杂度
                            break
                        else:
                            d=c+1
                            while True:
                                if x==c**3+d**3:#控制输出格式
                                    s=str(x)+' = '+str(a)+'^3 + '+str(b)+'^3 = '+str(c)+'^3 + '+str(d)+'^3'
                                    results.append(s)
                                    break
                                elif d>b:
                                    break 
                                else:d+=1 #使用后加一
                            c+=1#使用后加一
                    b+=1#使用后加一
            a+=1#使用后加一
    return results

主函数部分

主函数用来给定查找范围
if __name__ == '__main__':
    for num in [2000, 10000, 100000]:
        st = ramanujan(num)
        for item in st:
            print(item)

输出结果显示

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歆侈、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值