Changes between Version 1 and Version 2 of Ticket #9706, comment 65


Ignore:
Timestamp:
12/04/13 18:43:19 (8 years ago)
Author:
fredrik.johansson
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #9706, comment 65

    v1 v2  
    99        if n == 1:
    1010            return x, 1
    11         if n == 2:
    12             return 2*x^2 - 1, x
     11        a, b = recur((n+1)//2, x, both or n % 2)
    1312        if n % 2 == 0:
    14             a, b = recur(n//2, x, both)
    15             if both:
    16                 return 2*a^2 - 1, 2*a*b - x
    17             else:
    18                 return 2*a^2 - 1, 0
     13            return 2*a^2 - 1, both and 2*a*b - x
    1914        else:
    2015            a, b = recur(n//2 + 1, x, True)
    21             if both:
    22                 return 2*a*b - x, 2*b^2 - 1
    23             else:
    24                 return 2*a*b - x, 0
     16            return 2*a*b - x, both and 2*b^2 - 1
    2517    return recur(n, x, False)[0]
    2618}}}
     
    3426    def recur(n, x, both=False):
    3527        if n == 0:
    36             return 1, 2*x
     28            return 1, both and 2*x
    3729        if n == 1:
    38             return 2*x, 4*x^2-1
     30            return 2*x, both and 4*x^2-1
    3931        a, b = recur((n-1)//2, x, True)
    4032        if n % 2 == 0:
    41             if both:
    42                 return (b+a)*(b-a), 2*b*(x*b-a)
    43             else:
    44                 return (b+a)*(b-a), 0
     33            return (b+a)*(b-a), both and 2*b*(x*b-a)
    4534        else:
    46             if both:
    47                 return 2*a*(b-x*a), (b+a)*(b-a)
    48             else:
    49                 return 2*a*(b-x*a), 0
     35            return 2*a*(b-x*a), both and (b+a)*(b-a)
    5036    return recur(n, x, False)[0]
    5137}}}