Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.82 KB | None | 0 0
  1. def fast_sqrt(num):
  2.     if num < 6:
  3.         return int(floor(sqrt(num)))
  4.     else:
  5.         n = 0
  6.         p = 0
  7.         if num == 0:
  8.             return 0
  9.         high = num >> 1
  10.         low = 0
  11.         while(high > low + 1):
  12.             n = (high + low) >> 1
  13.             p = n * n
  14.             if num < p:
  15.                 high = n
  16.             elif num > p:
  17.                 low = n
  18.             else:
  19.                 break
  20.         return n if num == p else low
  21.  
  22. def to_int(arr):
  23.     ii = 0
  24.     size = len(arr)
  25.     while(ii < size):
  26.         arr[ii] = int(arr[ii])
  27.         ii += 1
  28.     return arr
  29.  
  30. def generate_genesis_element(ee):
  31.     cell = []
  32.     if ee > 0:
  33.         xx = ee%2
  34.     else:
  35.         xx = -1*ee%2
  36.     aa = int(ee/2) + xx
  37.     #nn = (xx**2 + ee)/2
  38.     nn = 1
  39.     bb = aa + 2*xx + 2*nn
  40.     cc = aa*bb
  41.     if cc > 0:
  42.         dd = fast_sqrt(cc)
  43.     else:
  44.         dd = fast_sqrt(-1*cc)
  45.     genesis = to_int([ee, nn, dd, xx, aa, bb])
  46.     #print(genesis)
  47.    
  48.     if ee <= 0:
  49.         t0 = left_index(-1*ee)
  50.         genesis[0] = ee
  51.         genesis = generate_negative_element(genesis, t0)
  52.  
  53.     return genesis
  54.  
  55. def left_index(e):
  56.     if e%2 == 0:
  57.         x = fast_sqrt(e/2)
  58.         #x = int(floor(sqrt(e/2)))
  59.         y = 2*x**2 + 2*x
  60.         enet = y
  61.         #print(y)
  62.         if y > e:
  63.             x -= 1
  64.             z = 2*x**2 + 2*x
  65.             enet = z
  66.         return x + 1
  67.  
  68.     if e%2 == 1:
  69.         if e > 7:
  70.             x = fast_sqrt(e)
  71.             #x = int(floor(((e-1)*3)**(1/3)))
  72.             enet = 9 + 2*x**2 + 8*x
  73.             while enet > e:
  74.                 x -= 1
  75.                 enet = 9 + 2*x**2 + 8*x
  76.             return x + 2
  77.         else:
  78.             return 1
  79.  
  80. def generate_negative_element(genesis, t):
  81.     e_t = genesis[0]
  82.     n_t = genesis[1]
  83.     b0 = genesis[5]
  84.     x0 = genesis[3]
  85.     g = (x0 % 2)*2 + 2
  86.     b_t = 2*(t)*(t+1) + b0 + g*(t)
  87.     a_t = 2*(t-1)*(t) + b0 + g*(t-1)
  88.  
  89.     x_t = x0 + 2*t
  90.    
  91.     c_t = a_t*b_t
  92.     d_t = fast_sqrt(c_t - e_t)
  93.     #n_t = (x_t**2 + e_t)/(2*a_t)
  94.  
  95.     return [e_t,n_t,d_t,x_t,a_t,b_t]
  96.  
  97.  
  98.  
  99.  
  100. ###############################################################
  101. # Begin Script
  102. ###############################################################
  103. print(generate_genesis_element(-24))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement