How to solve diophantine problems?
Bengt Richter
bokr at oz.net
Tue May 14 16:01:25 EDT 2002
On Tue, 14 May 2002 20:37:44 +0800, "Joshua, Y.J. Lai" <g893404 at oz.nthu.edu.tw> wrote:
>
>"Cameron Laird" <claird at starbase.neosoft.com> wrote in message
>news:EF9D274DA8540EF1.D12AA7084B83AAA2.1A9250647A55D036 at lp.airnews.net...
>> In article <TQXD8.31658$Po6.14894 at rwcrnsc52.ops.asp.att.net>,
>> Emile van Sebille <emile at fenx.com> wrote:
>> >Joshua, Y.J. Lai
>> >> I can roughly solve the diophantine problem by using a nest loop
>> >
>> >I'm not familiar with the "diophantine problem" and didn't, in a quick
>> >look, spot anything obvious to me stating it.
>> .
>> .
>> .
>> Rough translation: a solution in integers (to
>> a system of polynomial equations and constraints).
>
>Thank you for your precise explanation. The problem now I suffer is how can
>I write a new checking loop
>instead of using two FOR LOOPs as nest loop. I am really interested in that.
>I will be very grateful if anyone of you can give me some hints.
>
This has nested loops, but they work a bit differently.
You can just let it run until you get tired of waiting ;-)
>>> def td(x):
... "The number of balls used to construct a tetrahedron"
... return x*(x+1)*(x+2)/6
...
>>> def tri(y):
... "The number of balls used to construct a triangle"
... return y*(y+1)/2
...
>>> def dioh():
... x=xt=xp=y=0 # t for triangle, p for pyramid
... while 1:
... x += 1
... xt += x
... xp += xt
... while xp>0:
... y += 1
... xp -= y
... if xp==0:
... print "\rx = %d and y = %d , number = %d" % (x,y,td(x))
... if not x % 1000:
... print "\rx = %d and y = %d , n(x) = %d, n(y) = %d" % (x,y,td(x),tri(y)),
...
>>> dioh()
x = 1 and y = 1 , number = 1
x = 3 and y = 4 , number = 10
x = 8 and y = 15 , number = 120
x = 20 and y = 55 , number = 1540
x = 34 and y = 119 , number = 7140
x = 78000 and y = 12577364 , n(x) = 79095042026000, n(y) = 79095048882930
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 7, in dioh
KeyboardInterrupt
The last line just keeps getting overwritten at every even thousand balls
on the tetrahedron edge, until there's a valid output with td(x)==tri(y)
overwriting it and advancing to the next line.
Regards,
Bengt Richter
More information about the Python-list
mailing list