|
5鱼币
本帖最后由 风百默 于 2022-3-2 18:42 编辑
def ramanujan(n):
results = []
for i in range(2,n+1):
import random
x,y,r,z=random.sample(range(1,i),k=4)
if x**3+y**3==r**3+z**3 and r**3+z**3==i:
results.append(i,' = ',x,'^3+',y,'^3 =', r,'^3+',z,'^3')
else:
continue
return results
for num in [2000, 10000, 100000]:
st = ramanujan(num)
for item in st:
print(item)
for num in [2000, 10000, 100000]:
st = ramanujan(num)
for item in st:
print(item)
本帖最后由 isdkz 于 2022-3-3 14:56 编辑
首先,你得看题目要求,题目要求你用四个嵌套循环,
然后题目还要求 4 个不同的正整数,且 a^3 + b^3 = c^3 + d^3,除此之外没有别的要求了,
你的代码中的 r^3 + z^3 = i 很明显就不是题目要求,
还有就是这种情况很明显就要枚举,你用随机的话可能永远也算不出符合要求的那组数据,
最后,也就是你报错的地方,random模块的sample函数你传入了4就要从可迭代器中取四个样本,
而你的 i 却从2开始,也就是说当 i 为 2 时,你的 range(1, 2) 里面只有一个元素,总体少于样本,所以报错。
对你的代码修改如下,跟楼上大佬的代码差不多,只不过我加了一个 剪枝 处理。
剪枝,顾名思义,就是通过一些判断,砍掉搜索树上不必要的子树。
有时候,我们会发现某个结点对应的子树的状态都不是我们要的结果,
那么我们其实没必要对这个分支进行搜索,砍掉这个子树,就是剪枝
- def ramanujan(n):
- results = []
- for x in range(1, n):
- for y in range(1, n):
- if y != x:
- for r in range(1, n):
- if r != x and r != y:
- for z in range(1, n):
- if z != x and z!= y and z!=r:
- if (result := x**3+y**3) == r**3+z**3:
- results.append(f"{result} = {x}^3 + {y}^3 = {r}^3 + {z}^3")
- else:
- continue
- return results
- st = ramanujan(20)
- for item in st:
- print(item)
复制代码
|
最佳答案
查看完整内容
首先,你得看题目要求,题目要求你用四个嵌套循环,
然后题目还要求 4 个不同的正整数,且 a^3 + b^3 = c^3 + d^3,除此之外没有别的要求了,
你的代码中的 r^3 + z^3 = i 很明显就不是题目要求,
还有就是这种情况很明显就要枚举,你用随机的话可能永远也算不出符合要求的那组数据,
最后,也就是你报错的地方,random模块的sample函数你传入了4就要从可迭代器中取四个样本,
而你的 i 却从2开始,也就是说当 ...
|