looping through possible combinations of McNuggets packs of 6, 9 and 20
John Posner
jjposner at optimum.net
Wed Aug 18 20:50:32 CEST 2010
On 8/18/2010 1:38 PM, cbrown at cbrownsystems.com wrote:
>>> To go the other way, if d = 1, then there exists integers (not
>>> neccessarily positive) such that
>>
>>> a*x + b*y + c*z = 1
That fact is non-trivial, although the proof isn't *too* hard [1]. I
found it interesting to demonstrate the simpler case (a*x + b*y = 1) by
"instrumenting" the classic Python implementation of Euclid's Algorithm:
def show_gcd(a,b):
"""
find GCD of two integers, showing intermediate steps
in both remainder and linear-combination forms
"""
while b:
if a%b > 0:
rem_form = "%d == %d*(%d), rem %d" % (a, b, a/b, a%b)
equ_form = "%d == %d*(1) + %d*(-%d)" % (a%b, a, b, a/b)
print "%3d %3d %-30s %s" % (a,b, rem_form, equ_form)
a,b = b, a%b
print "\nGCD is", a
>>> show_gcd(124, 39)
124 39 124 == 39*(3), rem 7 7 == 124*(1) + 39*(-3)
39 7 39 == 7*(5), rem 4 4 == 39*(1) + 7*(-5)
7 4 7 == 4*(1), rem 3 3 == 7*(1) + 4*(-1)
4 3 4 == 3*(1), rem 1 1 == 4*(1) + 3*(-1)
Performing successive substitutions, bottom to top, using the equations
in the right-hand column:
1 == 4*(1) + 3*(-1)
== 4*(1) + (7*(1) + 4*(-1))*(-1)
== 4*(2) + 7*(-1)
== (39*(1) + 7*(-5))*(2) + 7*(-1)
== 39*(2) + 7*(-11)
== 39*(2) + (124*(1) + 39*(-3))*(-11)
== 39*(35) + 124*(-11)
What could be simpler! :-)
-John
[1] http://math453fall2008.wikidot.com/lecture-3 ("GCD as a linear
combonation" [sic])
More information about the Python-list
mailing list