Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.22 KB | None | 0 0
  1. from math import *
  2.  
  3. def to_int(arr):
  4.     ii = 0
  5.     size = len(arr)
  6.     while(ii < size):
  7.         arr[ii] = int(arr[ii])
  8.         ii += 1
  9.     return arr
  10.  
  11. def generate_genesis_element(ee):
  12.     cell = []
  13.     if ee > 0:
  14.         xx = ee%2
  15.     else:
  16.         xx = -1*ee%2
  17.     aa = int(ee/2) + xx
  18.     #nn = (xx**2 + ee)/2
  19.     nn = 1
  20.     bb = aa + 2*xx + 2*nn
  21.     cc = aa*bb
  22.     if cc > 0:
  23.         dd = fast_sqrt(cc)
  24.     else:
  25.         dd = fast_sqrt(-1*cc)
  26.     genesis = to_int([ee, nn, dd, xx, aa, bb])
  27.     #print(genesis)
  28.    
  29.     if False: #ee <= 0:
  30.         t0 = left_index(-1*ee)
  31.         genesis[0] = ee
  32.         genesis = generate_negative_element(genesis, t0)
  33.  
  34.     return genesis
  35.  
  36. #make sure input e is negative or 0
  37. def left_index(e):
  38.     if e%2 == 0:
  39.         x = fast_sqrt(e/2)
  40.         #x = int(floor(sqrt(e/2)))
  41.         y = 2*x**2 + 2*x
  42.         enet = y
  43.         #print(y)
  44.         if y > e:
  45.             x -= 1
  46.             z = 2*x**2 + 2*x
  47.             enet = z
  48.         return x + 1
  49.  
  50.     if e%2 == 1:
  51.         if e > 7:
  52.             x = fast_sqrt(e)
  53.             #x = int(floor(((e-1)*3)**(1/3)))
  54.             enet = 9 + 2*x**2 + 8*x
  55.             while enet > e:
  56.                 x -= 1
  57.                 enet = 9 + 2*x**2 + 8*x
  58.             return x + 2
  59.         else:
  60.             return 1
  61.  
  62. def fast_sqrt(num):
  63.     if num < 6:
  64.         return int(floor(sqrt(num)))
  65.     else:
  66.         n = 0
  67.         p = 0
  68.         if num == 0:
  69.             return 0
  70.         high = num >> 1
  71.         low = 0
  72.         while(high > low + 1):
  73.             n = (high + low) >> 1
  74.             p = n * n
  75.             if num < p:
  76.                 high = n
  77.             elif num > p:
  78.                 low = n
  79.             else:
  80.                 break
  81.         return n if num == p else low
  82.    
  83. def ayylgorithm4(c):
  84.     d = fast_sqrt(c)
  85.    
  86.     # _p or _n refers to the postive or negative link element respectively
  87.     e_p = c - d*d
  88.     e_n = e_p - (2*d + 1)
  89.  
  90.     n_p = 1
  91.     n_n = 1
  92.  
  93.     x_triv = d - 1
  94.     n_triv = (x_triv**2 + e_p)/(2*1)
  95.     trivsol_p = [e_p, n_triv, d, x_triv, 1, c]
  96.     print("trivsol_p = " + str(trivsol_p))
  97.  
  98.     d_n = d + 1
  99.     x_triv_n = d_n - 1
  100.     n_triv_n = ((x_triv_n**2 + e_n)/(2*1))
  101.     trivsol_n = [e_n, n_triv_n, d_n, x_triv_n, 1, c]
  102.     print("trivsol_n = " + str(trivsol_n))
  103.  
  104.  
  105.     genesis_p = generate_genesis_element(e_p)
  106.     genesis_n = generate_genesis_element(e_n)
  107.    
  108.     print("genesis positive = " + str(genesis_p))
  109.     print("genesis negative = " + str(genesis_n))
  110.  
  111.     #(c - b)/(trivsol[3] - 7) = b
  112.     print(c / (1  + (trivsol_p[3] - 7)))
  113.     #print(divide_from_vector(subtract_vectors(genesis_p,trivsol),3))
  114.     print(divide_from_vector(subtract_vectors(trivsol_p,trivsol_n),1))
  115.     x_p0 = genesis_p[3] #either 1 or 0
  116.     #x_p = e_p%2
  117.     x_n0 = genesis_n[3]
  118.  
  119.     a_p0 = genesis_p[4]
  120.     a_n0 = genesis_n[4]
  121.    
  122.     b_p0 = genesis_p[5]
  123.     b_n0 = genesis_n[5]
  124.  
  125.     g_p = (x_p0%2)*2 + 2
  126.     g_n = (x_n0%2)*2 + 2
  127.  
  128.     f_p = 4 - g_p
  129.     f_n = 4 - g_n
  130.  
  131.     f_n = 2*(f_n + (x_n0 - e_n%2)/2)
  132.  
  133.     f_p = 0
  134.     f_n = 10
  135.  
  136.     q = -1*(x_p0 - x_n0 + 1)/2
  137.    
  138.     #a = r*t_p + s
  139.     r = (f_p - f_n + 4*q)
  140.     s = a_p0 - a_n0 - 2*q**2 + (2 + f_n)*q
  141.  
  142.     ####################################################
  143.     #incomplete
  144.     ####################################################
  145.  
  146.  
  147. def generate_column(e, num_els):
  148.     gen = generate_genesis_element(e)
  149.     print(gen)
  150.     t = 1
  151.     while t <= num_els:
  152.         print(generate_element(gen, t-1))
  153.         t += 1
  154.  
  155. def generate_b(genesis_element, tt):
  156.     b0 = genesis_element[5]
  157.     xx = genesis_element[3]
  158.     gg = (xx % 2)*2 + 2
  159.     b_tt = 2*(tt)*(tt+1) + b0 + gg*(tt)
  160.     return b_tt
  161.  
  162. def generate_element(genesis, t):
  163.     t = t+1
  164.     e_t = genesis[0]
  165.     n_t = genesis[1]
  166.     b0 = genesis[5]
  167.     x0 = genesis[3]
  168.     g = (x0 % 2)*2 + 2
  169.     b_t = 2*(t)*(t+1) + b0 + g*(t)
  170.     a_t = 2*(t-1)*(t) + b0 + g*(t-1)
  171.     print(a_t)
  172.     x_t = x0 + 2*t
  173.    
  174.     c_t = a_t*b_t
  175.     d_t = fast_sqrt(c_t)
  176.     e_t = c_t - d_t**2
  177.  
  178.     #n_t = (x_t**2 + e_t)/(2*a_t)
  179.  
  180.     return [e_t,n_t,d_t,x_t,a_t,b_t]
  181.  
  182. def generate_negative_element(genesis, t):
  183.     e_t = genesis[0]
  184.     n_t = genesis[1]
  185.     b0 = genesis[5]
  186.     x0 = genesis[3]
  187.     g = (x0 % 2)*2 + 2
  188.     b_t = 2*(t)*(t+1) + b0 + g*(t)
  189.     a_t = 2*(t-1)*(t) + b0 + g*(t-1)
  190.  
  191.     x_t = x0 + 2*t
  192.    
  193.     c_t = a_t*b_t
  194.     d_t = fast_sqrt(c_t - e_t)
  195.     #n_t = (x_t**2 + e_t)/(2*a_t)
  196.  
  197.     return [e_t,n_t,d_t,x_t,a_t,b_t]
  198.  
  199. def subtract_vectors(A,B):
  200.     if len(A) != len(B):
  201.         print("Error: Input vectors of unequal lengths.")
  202.         return -1
  203.     C = []
  204.     ii = 0
  205.     while ii < len(A):
  206.         C.append(A[ii] - B[ii])
  207.         ii += 1
  208.     return C
  209.  
  210. def subtract_from_vector(A, sub):
  211.     B = []
  212.     for each in A:
  213.         B.append(each - sub)
  214.     return B
  215.  
  216. def divide_from_vector(A, div):
  217.     B = []
  218.     for each in A:
  219.         B.append(each/div)
  220.     return B
  221.  
  222. def convert_element(element):
  223.     #input: "{7:4:14:7:7:29}"
  224.     #output: [7, 4, 14, 7, 7, 29]
  225.    
  226.     element = element.strip("{").strip("}")
  227.     element = element.split(":")
  228.     cell = []
  229.     for each in element:
  230.         cell.append(int(each))
  231.     return cell
  232.  
  233. ###############################################################
  234. # Begin Script
  235. ###############################################################
  236.  
  237. #c = 1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139
  238. #c = 8876044532898802067
  239. #c = 179426341*179424691
  240. #c = 32416189777*32416187567
  241. #c = 217645199*236887691
  242. #c = 217645199*32416187567
  243. #c = 2630492240413883318777134293253671517529
  244. c = 203
  245. c = 145
  246. print("Given: c = " + str(c) + " = a*b")
  247. d = fast_sqrt(c)
  248. print("d = " + str(d))
  249. e = c - d**2
  250. print("e = " + str(e))
  251. gc = generate_genesis_element(e)
  252. print("Genesis row at (e,1) = " + str(gc))
  253.  
  254. ayylgorithm4(c)
  255. #print(generate_genesis_element(-246))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement