Advertisement
Guest User

First 10 digits afteer deciaml point of (1+sqrt(3))^2015

a guest
Sep 11th, 2015
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.35 KB | None | 0 0
  1. def mul( ab1, ab2):
  2.     """(a1 + b1*sqrt(3)) * (a2 + b2*sqrt(3)) """
  3.     a1, b1 = ab1
  4.     a2, b2 = ab2
  5.     return (a1*a2 + 3*b1*b2, a1*b2 + a2*b1)
  6. def square(ab):
  7.     return mul(ab, ab)
  8. def sqrti( n ):
  9.     """integer part of the square root, for long arithmetics"""
  10.     x = 1
  11.     while True:
  12.         x1 = (x + n//x)//2
  13.         x12 = x1*x1
  14.         if x12 <= n and x12 + 2*x1+1 > n:
  15.             return x1
  16.         x = x1
  17. def intpart( ab ):
  18.     #integer part of a+b*sqrt(3)
  19.     # is a + int(sqrt(b*b*3))
  20.     a, b = ab
  21.     return a + sqrti(b*b*3)
  22.  
  23. def power( ab, n ):
  24.     if n == 0: return (1,0)
  25.     if n == 1: return ab
  26.     ab_n2 = square(power(ab, n // 2))
  27.     if n % 2: return mul(ab_n2, ab)
  28.     else:     return ab_n2
  29. def smul( ab, k):
  30.     a,b=ab
  31.     return (a*k, b*k)
  32. def subtract_int(ab, n):
  33.     a,b=ab
  34.     return (a-n,b)
  35. def decimal_digits( ab, n ):
  36.     x0 = intpart(ab)
  37.     ab = subtract_int(ab, x0)
  38.     digits = []
  39.     while len(digits)!=n:
  40.         ab = smul(ab, 10)
  41.         digit = intpart(ab)
  42.         digits.append(digit)
  43.         ab = subtract_int(ab, digit)
  44.     return x0, digits
  45.  
  46. N = 2015
  47. num_digits = 10
  48. print ("Calculating (1+sqrt(3))**{N}".format(N=N))
  49. x0, digits = decimal_digits( power( (1,1), N), num_digits )
  50. print ("Integer part:")
  51. print (x0)
  52. print ("Digits after deciaml point")
  53. print ("".join(map(str,digits)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement