from fractions import Fraction as R def choose(n, k): """ chosen / adapted from:
http://www.velocityreviews.com/forums/t502438-combination-function-in-python.html """ ntok = 1 for t in range(min(k, n-k)): ntok = ntok*(n-t)//(t+1) return ntok def Bernoulli(): """ Bernoulli Numbers using Fraction type numbers http://en.wikipedia.org/wiki/Bernoulli_number#Recursive_definition http://oeis.org/A027641 http://oeis.org/A027642 """ B = [R(1,1)] def Sum(m): total = R(0,1) for k in range(0,m): total += choose(m, k) * R(B[k],m-k+1) return 1 - total m = 1 while True: B.append(Sum(m)) yield B[-1] m += 1 ==== >>> thegen = Bernoulli() >>> [next(thegen) for i in range(20)] [Fraction(1, 2), Fraction(1, 6), Fraction(0, 1), Fraction(-1, 30), Fraction(0, 1), Fraction(1, 42), Fraction(0, 1), Fraction(-1, 30), Fraction(0, 1), Fraction(5, 66), Fraction(0, 1), Fraction(-691, 2730), Fraction(0, 1), Fraction(7, 6), Fraction(0, 1), Fraction(-3617, 510), Fraction(0, 1), Fraction(43867, 798), Fraction(0, 1), Fraction(-174611, 330)] >>> import pprint >>> pprint.pprint([next(thegen) for i in range(20)], width=80) [Fraction(0, 1), Fraction(854513, 138), Fraction(0, 1), Fraction(-236364091, 2730), Fraction(0, 1), Fraction(8553103, 6), Fraction(0, 1), Fraction(-23749461029, 870), Fraction(0, 1), Fraction(8615841276005, 14322), Fraction(0, 1), Fraction(-7709321041217, 510), Fraction(0, 1), Fraction(2577687858367, 6), Fraction(0, 1), Fraction(-26315271553053477373, 1919190), Fraction(0, 1), Fraction(2929993913841559, 6), Fraction(0, 1), Fraction(-261082718496449122051, 13530)]
_______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig