2.10 完美立方

description

费马大定理断言:当整数n>2时,关于a,b,c的方程an=bn+cn没有正整数解。该定理被提出后,历经三百多年,经历多人猜想辩证,最终在1995年被英国数学家安德鲁·怀尔斯证明。当然,可以找到大于1的4个整数满足完美立方等式:a3=b3+c3+d3(例如123=63+83+103)。编写一个程序,对于任意给定的正整数N(N ≤100),寻找所有的四元组(a,b,c,d),满足a3=b3+c3+d3,其中1<a,b,c,d≤N。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入格式
输入一个正整数N(N<=100),‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输出格式
按照a的值从小到大,每行输出一个完美立方等式,其中b,c,d按照非降序排列输出。若两个完美立方等式中a的值相同,则b的值小的先输出;在b值相等的情况下,c值小的先输出;在b,c都相等的情况下,d值小的先输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入输出示例

24

Cube = 6,Tripe = (3,4,5)
Cube = 12,Tripe = (6,8,10)
Cube = 18,Tripe = (2,12,16)
Cube = 18,Tripe = (9,12,15)
Cube = 19,Tripe = (3,10,18)
Cube = 20,Tripe = (7,14,17)
Cube = 24,Tripe = (12,16,20)

code

  1. 直接使用蛮力法进行求解
  2. 代码:
# 也可以使用i**3
def tPow(i):
    return i*i*i

def triple(i,j,k,m):
    if tPow(i) == tPow(j)+tPow(k)+tPow(m):
        return True
    else:
        return False

n = eval(input())
for i in range(2,n+1):
    for j in range(2,n+1):
        for k in range(j,n+1):
            for m in range(k,n+1):
                if(triple(i,j,k,m)):
                    print("Cuble = {},Triple = ({},{},{})".format(i,j,k,m))

# Cuble = 6,Triple = (3,4,5)
# Cuble = 12,Triple = (6,8,10)
# Cuble = 18,Triple = (2,12,16)
# Cuble = 18,Triple = (9,12,15)
# Cuble = 19,Triple = (3,10,18)
# Cuble = 20,Triple = (7,14,17)
# Cuble = 24,Triple = (12,16,20)

改进:一开始就把立方的结果算好保存

def sum(i, j, k, m):
    global ls
    if ls[i] == ls[j]+ls[k]+ls[m]:
        return True
    else:
        return False


def triple(n):
    ls = []
    for i in range(n+1):
        ls.append(i**3)
    return ls


n = eval(input())
ls = triple(n)  # 避免之后的重复计算,直接开始的开始的时候就算好
for i in range(2, n+1):
    for j in range(2, n+1):
        for k in range(j, n+1):
            for m in range(k, n+1):
                if(sum(i, j, k, m)):
                    print("Cuble = {},Triple = ({},{},{})".format(i, j, k, m))

# Cuble = 6,Triple = (3,4,5)
# Cuble = 12,Triple = (6,8,10)
# Cuble = 18,Triple = (2,12,16)
# Cuble = 18,Triple = (9,12,15)
# Cuble = 19,Triple = (3,10,18)
# Cuble = 20,Triple = (7,14,17)
# Cuble = 24,Triple = (12,16,20)

summary

  1. python中 i**n就是求i的N次方
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值