Permalänk
Medlem

Python ramanujantal

Har i uppgift att göra ett litet program i Pyhton som hittar heltalslösningarna till a^3+b^3=1729
Såhär ser mitt program ut (funkade inte med indrag, därför jag har punkter istället):

def b(a):
...return (n-(a**3))**(1/3)

n = 1729
y = int(n**(1/3))+1

for a in range (y):
...x=b(a)
...if x==int(x):
......print a,x

Tanken är att göra om ekvationen till ett uttryck för b och se vad b blir för olika värden på a. När b blir ett heltal så har man funnit en lösning. A kan inte vara större än 1729^(1/3). När jag kör programmet får jag bara den sista lösningen: 12 för a och 1 för b. Varför skriver den inte ut alla lösningar? Hur får jag den att skriva ut alla lösningar? Villkoret för if-satsen, x är ett heltal, uppfylls ju för för fler a än bara det sista — testar man att ta bort if-vilkoret och printar alla a,x ser man att så är fallet.

Permalänk
Medlem

Det skulle kanske kunna bero på att flyttalen i python inte har en exakt representation av alla heltal. Testa följande istället:

if(abs(x-int(x)) < 0.000001)

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

Om du vill slippa skriva ... kan du lägga in kod inom [code]-taggar:

hej