得到错误输出(拉马努金)
问题描述:
所以我用一些所谓的拉马努金的数字工作。基本上我想要做的功能是这样的:得到错误输出(拉马努金)
- 输入来自用户的数量,并将其保存正
- 函数打印向量的两个条目
(a,b)
,其中a^3+b^3=n
列表。
例如,当I输入n = 443889
,我应该得到的[(76,17),(38,73)]
的输出,因为76^3 + 17^3 = 443889,和38^3 + 73^3 = 443889.
查看我的代码如下,当我输入n=443889
时,我得到这个[(76, 17), (75, 28), (74, 34), (73, 38), (72, 41)]
作为输出,即使这些向量中的一些不是我的方程的解决方案。
def ramanujans(n):
lista = []
counter = 0
for a in range(1,n):
b = (n- (a**3))**(1/3)
result = a**3 + b**3
if isinstance(b,complex):
break
elif result == n:
b = int(round(b))
lista.insert(0,(a, b))
return (lista)
答
有一点不同的检查复杂的结果和不同的检查,如果(只有整数比较)result == n
我似乎得到正确的结果:
def ramanujans(n):
res = []
for a in range(1, n):
s = n - a**3
if s < 0:
break
b = round(s**(1/3))
result = a**3 + b**3
if result == n:
res.append((a, b))
return res
有:
[(17, 76), (38, 73), (73, 38), (76, 17)]
为n=443889
结果,你可以停止循环更早;如果a
是围绕(n/2)**(1/3)
你刚刚得到你已经有了一个a
和b
互换的结果;这可能会看起来像(没有仔细检查边缘情况...):
from math import ceil
def ramanujans(n):
res = []
limit = ceil(((n/2)**(1/3)))
for a in range(1, limit+1):
s = n - a**3
b = round(s**(1/3))
result = a**3 + b**3
if result == n:
if a <= b: # this is to cover the edge cases...
res.append((a, b))
return res
print(ramanujans(n=443889)) # [(17, 76), (38, 73)]
print(ramanujans(n=2000)) # [(10, 10)]
print(ramanujans(n=1729)) # [(1, 12), (9, 10)]
并且只会返回'half'结果。
太棒了,谢谢! – armara
出于某种原因,您发布的第二个代码在n = 2000时不起作用。我应该得到输出[(10,10)],因为10^3 + 10^3 = 2000,但是我得到一个空列表。 – armara
我试图改变到'小区(第(n **(1/3))',所以我除去'/ 2'部分,这使得它对于n = 2000,但它也使输出再次被加倍对于n = 1729 – armara