Guest User

Untitled

a guest
May 30th, 2018
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.80 KB | None | 0 0
  1. WINDOW::
  2.  
  3. ////////////////////////
  4.  
  5.  
  6. from Tkinter import *
  7. from PIL import ImageTk, Image, ImageDraw, ImageFont
  8. import TheEndClass as tec
  9. import os
  10.  
  11.  
  12. class EndWindow:
  13.  
  14. def __init__(self):
  15. self.record = tec.ab(5,31)
  16. self.squareWidth = 4
  17. self.buildWindow()
  18. self.redrawCanvas()
  19.  
  20.  
  21. def changeRecord(self,newRec):
  22. self.record = newRec
  23. self.redrawCanvas()
  24.  
  25.  
  26. def zoomIn(self):
  27. self.squareWidth += 1
  28. self.redrawCanvas()
  29.  
  30. def zoomOut(self):
  31. self.squareWidth -= 1
  32. if(self.squareWidth < 1):
  33. self.squareWidth = 1
  34. self.redrawCanvas()
  35.  
  36. def updateAB(self):
  37. aVal = int(self.aEntry.get())
  38. bVal = int(self.bEntry.get())
  39. self.record = tec.ab(aVal,bVal)
  40. self.redrawCanvas()
  41.  
  42. def createRecord(self):
  43. string = self.createVar.get()
  44. strings, creates = tec.Record.createStuff()
  45. i = strings.index(string)
  46. self.record = creates[i](int(self.oneEntry.get()), int(self.twoEntry.get()), int(self.threeEntry.get()))
  47. self.redrawCanvas()
  48.  
  49. def redrawCanvas(self):
  50. #leftSide
  51. IMG = tec.generateSquare(self.record, squareWidth = self.squareWidth)
  52. self.canvas.delete(ALL)
  53. tkim = ImageTk.PhotoImage(IMG)
  54. self.imagesprite = self.canvas.create_image(200,200,image=tkim)
  55. self.canvas.pack(side=BOTTOM)
  56.  
  57. #rightside
  58. self.updateRightLabels()
  59. self.root.mainloop()
  60.  
  61. def updateRightLabels(self):
  62. frm = self.bottomRightFrame
  63. for widget in frm.winfo_children():
  64. widget.destroy()
  65.  
  66. for i in range(len(tec.Record.strs())):
  67. newframe = Frame(frm)
  68. newframe.pack(side=LEFT)
  69.  
  70. label = Label(newframe, text=tec.Record.strs()[i])
  71. value = Label(newframe, text=str(self.record.vals()[i]))
  72. label.pack(side=TOP)
  73. value.pack(side=BOTTOM)
  74.  
  75.  
  76.  
  77. def upE(self,event):
  78. self.UPE()
  79.  
  80. def UPE(self):
  81. e = self.record[0]
  82. n = self.record[1]
  83. x = self.record[3]
  84. newE = e + 2*n
  85.  
  86. self.record = tec.enx(newE, n, x)
  87. self.redrawCanvas()
  88.  
  89. def downE(self,event):
  90. self.DOWNE()
  91.  
  92. def DOWNE(self):
  93. e = self.record[0]
  94. n = self.record[1]
  95. x = self.record[3]
  96. newE = e - 2*n
  97.  
  98. self.record = tec.enx(newE, n, x)
  99. self.redrawCanvas()
  100.  
  101.  
  102.  
  103. def buildWindow(self):
  104. self.root = Tk()
  105. root = self.root
  106.  
  107. root.bind('<Left>', self.downE)
  108. root.bind('<Right>', self.upE)
  109.  
  110. self.leftFrame = Frame(root)
  111. self.rightFrame = Frame(root)
  112. self.leftFrame.pack(side=LEFT)
  113. self.rightFrame.pack(side=RIGHT)
  114. leftFrame = self.leftFrame
  115. rightFrame = self.rightFrame
  116.  
  117. #left side
  118. self.topToolFrame = Frame(leftFrame)
  119. topToolFrame = self.topToolFrame
  120. self.ZObutton = Button(topToolFrame, text="-", command=self.zoomOut)
  121. self.ZIbutton = Button(topToolFrame, text="+", command=self.zoomIn)
  122. self.ZObutton.pack(side=LEFT)
  123. self.ZIbutton.pack(side=RIGHT)
  124. self.topToolFrame.pack(side=TOP)
  125.  
  126. self.canvas = Canvas(leftFrame, width=400, height=400)
  127. IMG = tec.generateSquare(self.record, squareWidth = self.squareWidth)
  128. tkim = ImageTk.PhotoImage(IMG)
  129. self.imagesprite = self.canvas.create_image(200,200,image=tkim)
  130. self.canvas.pack(side=BOTTOM)
  131.  
  132. #right side
  133.  
  134. #top right
  135. self.topRightFrame = Frame(self.rightFrame, padx = 10, pady = 10)
  136. self.topRightFrame.pack(side=TOP)
  137.  
  138. self.ABLabel = Label(self.topRightFrame, text="AB:")
  139. self.ABLabel.pack(side=LEFT)
  140.  
  141. self.aEntry = Entry(self.topRightFrame, width=5)
  142. self.aEntry.pack(side=LEFT)
  143. self.bEntry = Entry(self.topRightFrame, width=5)
  144. self.bEntry.pack(side=LEFT)
  145.  
  146. self.ABButton = Button(self.topRightFrame, text="AB", command = self.updateAB)
  147. self.ABButton.pack(side=RIGHT)
  148.  
  149. #mid right
  150. self.midRightFrame = Frame(self.rightFrame)
  151. self.midRightFrame.pack()
  152.  
  153. listOptions, funcList = tec.Record.createStuff()
  154. self.createVar = StringVar(self.midRightFrame)
  155. self.popMenu = OptionMenu(self.midRightFrame, self.createVar, *listOptions)
  156. self.popMenu.config(width = 8)
  157. self.popMenu.pack(side=LEFT)
  158.  
  159. self.oneEntry = Entry(self.midRightFrame, width=5)
  160. self.oneEntry.pack(side=LEFT)
  161. self.twoEntry = Entry(self.midRightFrame, width=5)
  162. self.twoEntry.pack(side=LEFT)
  163. self.threeEntry = Entry(self.midRightFrame, width=5)
  164. self.threeEntry.pack(side=LEFT)
  165.  
  166. self.CreateButton = Button(self.midRightFrame, text="Create", command = self.createRecord)
  167. self.CreateButton.pack(side=RIGHT)
  168.  
  169. #bottom right
  170. self.bottomRightFrame = Frame(self.rightFrame)
  171. self.bottomRightFrame.pack(side = BOTTOM)
  172. self.updateRightLabels()
  173.  
  174. #last row
  175. self.bottomBottomRight = Frame(self.rightFrame)
  176. self.bottomBottomRight.pack(side=BOTTOM)
  177.  
  178. self.e2nButtonU = Button(self.bottomBottomRight, text="e+2n", command=self.UPE)
  179. self.e2nButtonU.pack(side=LEFT)
  180. self.e2nButtonD = Button(self.bottomBottomRight, text="e-2n", command=self.DOWNE)
  181. self.e2nButtonD.pack(side=LEFT)
  182.  
  183.  
  184. root.mainloop()
  185.  
  186.  
  187. j = EndWindow()
  188.  
  189. ///////////////
  190.  
  191.  
  192. TheEndClass.py:
  193.  
  194. /////////////
  195.  
  196. import math
  197. import NumberTheory as nt
  198. from PIL import ImageFont
  199. from PIL import Image
  200. from PIL import ImageDraw
  201.  
  202. primes = nt.primes
  203. coprimes = nt.coprimes
  204.  
  205.  
  206. class SquareThing:
  207.  
  208.  
  209. @staticmethod
  210. def BR(a, b):
  211. if(a%2 != 1 or b%2 != 1):
  212. print("Error")
  213. return
  214. return SquareThing(b,a)
  215.  
  216. @staticmethod
  217. def BL(a, b):
  218. if(a%2 != 1):
  219. print("Error")
  220. return
  221. if(b%2 != 1):
  222. print("Error")
  223. return
  224. big = (a+b)//2
  225. little = (b-a)//2
  226. if(little%2==1):
  227. print("Error")
  228. return
  229. corner = little//2
  230. center = big - little
  231. return SquareThing(center,corner)
  232.  
  233. @staticmethod
  234. def LR(a, b):
  235. center = 2*b + 1
  236. return SquareThing(center, a)
  237.  
  238. @staticmethod
  239. def MIN(a,b): #2*big rec + center square
  240. center = a
  241. corner = (b-a)//2
  242. return SquareThing(center,corner)
  243.  
  244. @staticmethod
  245. def LM(a,b): #Big rec + center square
  246. center = a
  247. corner = b-a
  248. return SquareThing(center,corner)
  249.  
  250. @staticmethod
  251. def EM(a,b):
  252. center = 2*a+1
  253. corner = b - (a-1)//2
  254. return SquareThing(center,corner)
  255.  
  256. @staticmethod
  257. def E(a,b):
  258. center = a
  259. corner = b-a
  260. return SquareThing(center,corner)
  261.  
  262. @staticmethod
  263. def waysToBuild():
  264. ways = [SquareThing.BL, SquareThing.BR, SquareThing.LM,
  265. SquareThing.MIN, SquareThing.LR, SquareThing.EM,
  266. SquareThing.E]
  267. return ways
  268.  
  269. @staticmethod
  270. def printVals(recs):
  271. maxLen = 6
  272. for rec in recs:
  273. if(rec is None):
  274. continue
  275. for val in rec.vals():
  276. if(len(str(val)) > maxLen):
  277. maxLen = len(str(val))
  278.  
  279. output = ""
  280. tops = SquareThing.strs()
  281. firstRow = ""
  282. for part in tops:
  283. spaces = maxLen - len(part)
  284. spa = " " * spaces
  285. firstRow += "|" + spa + str(part)
  286.  
  287. output += firstRow + "|\n"
  288.  
  289. for rec in recs:
  290. row = ""
  291. if(rec is None):
  292. continue
  293. for val in rec.vals():
  294. spaces = maxLen - len(str(val))
  295. spa = " " * spaces
  296. row += "|" + spa + str(val)
  297. output += row + "|\n"
  298. print(output)
  299.  
  300.  
  301. def __init__(self, center, corner):
  302. bigSquare = center + 2*corner
  303. self.bs = bigSquare
  304. self.center = center
  305. self.corner = corner
  306. triangleSide = (center - 1)/2
  307. if(triangleSide % 1 == 0):
  308. triangleSide = int(triangleSide)
  309.  
  310. self.tri = triangleSide
  311.  
  312. self.tradF = [bigSquare - 2*corner, bigSquare + 2*corner]
  313. self.trad = bigSquare**2 - 4*corner**2
  314.  
  315. self.brF = [corner, center]
  316. self.br = corner*center
  317.  
  318. self.lrF = [corner, triangleSide]
  319. self.lr = corner*triangleSide
  320.  
  321. self.Em = T(triangleSide) + self.lr
  322.  
  323. self.lm = self.br + self.center**2
  324. self.lmF = [self.center, self.corner + self.center]
  325.  
  326.  
  327. self.E = T(center) + self.br
  328.  
  329. self.min = center*bigSquare
  330. self.minF = [center, bigSquare]
  331.  
  332. def vals(self):
  333. array = [self.trad, self.br, self.lm, self.min, self.lr, self.Em, self.E,self.corner,self.tri]
  334. return array
  335.  
  336. @staticmethod
  337. def strs():
  338. array = ["BL", "BR", "LM", "MIN","LR","EM","E","corner","tri"]
  339. return array
  340.  
  341.  
  342.  
  343.  
  344. def printSquares(vals):
  345. SquareThing.printVals(vals)
  346.  
  347.  
  348.  
  349.  
  350. class Record:
  351.  
  352. @staticmethod
  353. def ABD(A,B,D):
  354. e,n,d,x,a,b = ABD(A,B,D)
  355. return Record(e,n,d,x,a,b)
  356.  
  357. @staticmethod
  358. def ENA(E,N,A):
  359. e,n,d,x,a,b = ENA(E,N,A)
  360. return Record(e,n,d,x,a,b)
  361.  
  362. @staticmethod
  363. def AB(A,B):
  364. e,n,d,x,a,b = AB(A,B)
  365. return Record(e,n,d,x,a,b)
  366.  
  367. @staticmethod
  368. def ABX(A,B,X):
  369. d = A + X
  370. return Record.ABD(A,B,d)
  371.  
  372. @staticmethod
  373. def DEA(D,E,A):
  374. e,n,d,x,a,b = DEA(D,E,A)
  375. return Record(e,n,d,x,a,b)
  376.  
  377. @staticmethod
  378. def ENX(E,N,X):
  379. e,n,d,x,a,b = ENX(E,N,X)
  380. return Record(e,n,d,x,a,b)
  381.  
  382. @staticmethod
  383. def BSLS(bs,ls):
  384. c = bs*bs - ls*ls
  385. d = int(math.sqrt(c))
  386. e = c - d * d
  387. n = bs - d
  388. x = ls - n
  389. a = d - x
  390. b = a + 2*n + 2*x
  391. return Record(e,n,d,x,a,b)
  392.  
  393. @staticmethod
  394. def tMethod(t,Ac, Bc, Xc, Dc):
  395. a = ABDguy(t,Ac)
  396. b = ABDguy(t,Bc)
  397. d = ABDguy(t,Dc)
  398. x = Xguy(t,Xc)
  399. e = a*b - d*d
  400. n = (b - a - 2*x)//2
  401. return Record(e,n,d,x,a,b)
  402.  
  403. @staticmethod
  404. def printRecs(recs):
  405. maxLen = 5
  406. for i in Record.strs():
  407. if(len(i)>maxLen):
  408. maxLen = len(i)
  409. for i in recs:
  410. for j in i.vals():
  411. if(len(str(j)) > maxLen):
  412. maxLen = len(str(j))
  413.  
  414. start = ""
  415. for i in Record.strs():
  416. start += " "*(maxLen-len(i)) + i + "|"
  417. start += "\n"
  418.  
  419. for rec in recs:
  420. for val in rec.vals():
  421. start += " "*(maxLen-len(str(val))) + str(val) + "|"
  422. start += "\n"
  423. print(start)
  424.  
  425. @staticmethod
  426. def createStuff():
  427. strings = ["ABD","ABX","ENA","DEA","ENX"]
  428. funcs = [Record.ABD, Record.ABX, Record.ENA, Record.DEA, Record.ENX]
  429. return strings,funcs
  430.  
  431. @staticmethod
  432. def strs():
  433. return ['e','n','d','x','a','b','c','bs','ls','f','nn','2d1n1g','f-1','n-1']
  434.  
  435. def vals(self):
  436. return [self.e, self.n, self.d, self.x, self.a, self.b, self.c,
  437. self.bs, self.ls, self.f, (self.nn,self.nn%8),
  438. (self.dd1n1,self.dd1n1%8), (self.f1,self.f1%8),
  439. (self.n1,self.n1%8)]
  440.  
  441.  
  442.  
  443. def __init__(self,E,N,D,X,A,B):
  444. self.e = E
  445. self.n = N
  446. self.d = D
  447. self.x = X
  448. self.a = A
  449. self.b = B
  450. self.c = A*B
  451. self.bs = D+N
  452. self.ls = X+N
  453. self.f = 2*D + 1 - E
  454. self.nn = N*N
  455. self.dd1n1 = (2*D-1)*(N-1)
  456. self.f1 = self.f - 1
  457. self.n1 = self.n - 1
  458.  
  459.  
  460. def __str__(self):
  461. return str((self.e, self.n, self.d, self.x, self.a, self.b))
  462.  
  463. def __getitem__(self,indices):
  464. return self.vals()[indices]
  465.  
  466. def F(self):
  467. self.d = self.d+1
  468. self.e = self.c - self.d**2
  469. self.x = self.d - self.a
  470. self.n = (self.b + self.a)//2 - self.d
  471.  
  472.  
  473. def FI(self):
  474. self = Record.ABD(self.a, self.b, self.d-1)
  475.  
  476. def bigRec(self):
  477. return self.b**2 + self.b * self.a
  478.  
  479. def shiftE(self,W):
  480. e,n,d,x,a,b = self.e, self.n,self.d,self.x,self.a,self.b
  481. return Record(e+2*W*n, n, d+W, x, a+W, b+W)
  482.  
  483. def swapDN(self):
  484. return Record.ABD(self.a, self.b, self.n)
  485.  
  486. def zeroD(self):
  487. return Record.ABD(self.a, self.b, 0)
  488.  
  489. def shiftN(self,amt):
  490. e,n,d,x,a,b = self.e, self.n, self.d, self.x, self.a, self.b
  491. return Record(e + 2*a*amt, n + amt, d, x, a, b+2*amt)
  492.  
  493. def zeroN2(self):
  494. return self.shiftN(-self.n)
  495.  
  496. def zeroN(self):
  497. return Record.ABD(self.a, self.b, self.bs)
  498.  
  499. def oneN(self):
  500. return Record.ABD(self.a, self.b, 1).swapDN()
  501.  
  502. def shiftD(self,n):
  503. return Record.ABD(self.a, self.b, self.d + n)
  504.  
  505. def upAB(self):
  506. return Record.AB(self.a + 1, self.b + 1)
  507.  
  508. def downAB(self):
  509. return Record.AB(self.a - 1, self.b - 1)
  510.  
  511. def aubd(self):
  512. return Record.AB(self.a + 1, self.b - 1)
  513.  
  514. def abdu(self):
  515. return Record.AB(self.a - 1, self.b + 1)
  516.  
  517. def shiftAB(self, n):
  518. return Record.AB(self.a + n, self.b + n)
  519.  
  520.  
  521.  
  522.  
  523. def factors(n): return nt.factors(n)
  524. def gcd(a,b): return nt.gcd(a,b)
  525. def lcm(a,b): return int(a*b)//int(gcd(a,b))
  526. def sqrt(n): return nt.intSqrt(n)
  527. def pf(n): return nt.pf(n)
  528. def legendre(a,p): return int(nt.legendre(a,p))
  529. def ab(a,b): return Record.AB(a,b)
  530. def abd(a,b,d): return Record.ABD(a,b,d)
  531. def ABD(a,b,d): return nt.ABD(a,b,d)
  532. def dea(d,e,a): return Record.DEA(d,e,a)
  533. def DEA(d,e,a): return nt.DEA(d,e,a)
  534. def makeTree(n): return nt.makeTree(n)
  535. def genFracs(cf,iterations): return nt.genFracs(cf,iterations)
  536. def cfroot(n): return nt.CFRoot(n)
  537. def pell(n): return nt.pell(n)
  538. def L(n): return 2*n-1
  539. def T(n): return (n*(n+1))//2
  540. def printRecs(n): Record.printRecs(n)
  541.  
  542.  
  543. def gauss(a,p):
  544. P = int((p-1)/2)
  545. num = a
  546. j = 1
  547. for i in range(P):
  548. res = num % p
  549. if(res > P):
  550. j *= -1
  551. num += a
  552. return j
  553.  
  554.  
  555.  
  556. def AB(a,b):
  557. c = a*b
  558. d = sqrt(c)
  559. e = c - d*d
  560. x = d - a
  561. if(a==0):
  562. n = (b - a - 2*x)//2
  563. else:
  564. n = (x*x + e) // (2*a)
  565. if(2*n*a != x*x + e):
  566. print("Error AB", a,b)
  567. if((d+n)**2 - (x+n)**2 != c):
  568. print("Error AB", a,b)
  569. return (e,n,d,x,a,b)
  570.  
  571.  
  572. def ena(e,n,a): return Record.ENA(e,n,a)
  573. def ENA(e,n,a):
  574. x = math.sqrt(2*n*a - e)
  575. if(x%1 != 0):
  576. print("error ENA",e,n,a)
  577. x = int(x)
  578. d = x + a
  579. return (e,n,d,x,a, a + 2*x + 2*n)
  580.  
  581. def enx(e,n,x): return Record.ENX(e,n,x)
  582. def ENX(e,n,x):
  583. a = (x*x + e)/(2*n)
  584. if(a%1!=0):
  585. print("enx err", e,n,x)
  586. a = int(a)
  587. d = x + a
  588. b = a + 2*x + 2*n
  589. return (e,n,d,x,a,b)
  590.  
  591. def abx(a,b,x): return Record.ABX(a,b,x)
  592.  
  593. def ABDguy(t,const,start):
  594. return T(t)*4 + t*const + start
  595.  
  596. def Xguy(t, const):
  597. return 2*t + const
  598.  
  599. def DE(c):
  600. D = sqrt(c)
  601. return (D,c-D*D)
  602.  
  603.  
  604. records = []
  605. def generateRecords(coprimes = True):
  606. if(coprimes):
  607. for i in primes:
  608. for j in primes:
  609. if(i<j):
  610. records.append(ab(i,j))
  611. return records
  612.  
  613. for i in range(200):
  614. for j in range(i):
  615. records.append(ab(i-j,i+j))
  616. return records
  617. generateRecords()
  618.  
  619. def quad(A,B):
  620. rec = AB(A,B)
  621. n = rec[1]
  622. e = rec[0]
  623.  
  624. #b^2-4ac = d, b^2 - d = 4ac, c = (b^2-d)/2a
  625. print(rec)
  626. for num in rec[:5]:
  627. print((e*e-num)/(4*n))
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634. def getRecordType(recs, char, goal = "R"):
  635. if(char == "e"): ind = 0
  636. elif(char == "n"): ind = 1
  637. elif(char == "d"): ind = 2
  638. elif(char == "x"): ind = 3
  639. elif(char == "a"): ind = 4
  640. elif(char == "b"): ind = 5
  641. elif(char == "c"): ind = 6
  642. elif(char == "d+n"): ind = 7
  643. elif(char == "x+n"): ind = 8
  644. elif(char == "f"): ind = 9
  645. elif(char == "r"): ind = 10
  646. elif(char == "br"): ind = 11
  647. elif(char == "nn"): ind = 12
  648. elif(char == "2d1n1"): ind = 13
  649.  
  650. def compare(rec):
  651. return rec.vals()[ind]
  652.  
  653. if(goal == "R"):
  654. printList = sorted(recs, key=compare)
  655. else:
  656. printList = []
  657. for rec in recs:
  658. if(rec.vals()[ind] == goal):
  659. printList.append(rec)
  660. return printList
  661.  
  662.  
  663. def fact(n):
  664. for i in range(1,n):
  665. if(2*T(i) + (i*i-2)*i == n):
  666. return i
  667. return -1
  668.  
  669. def asthing(c):
  670. a = pf(c)[0]
  671. b = c//a
  672. e,n,d,x,a,b = AB(a,b)
  673. return a, 2*(x+n)-1
  674.  
  675. def nums(a,b):
  676. return 2*T(a) + a*b, 2*T(b) + a*b
  677.  
  678.  
  679. def legTest(a):
  680. base = 4*abs(a)
  681. dic = {}
  682. for p in primes:
  683. res = legendre(a,p)
  684. mod = p % base
  685. if(mod not in dic.keys()):
  686. dic[mod] = []
  687. dic[mod].append(res)
  688. for p in sorted(dic.keys()):
  689. print(str(p) + "\t"+str( dic[p][0]))
  690.  
  691. def factor(c):
  692. d= sqrt(c)
  693. e = c - d*d
  694.  
  695.  
  696. def test(c):
  697. rec = ab(1,c)
  698. start = rec[9]
  699.  
  700. lim = 0
  701. while(ab(1,c + start**2)[0] != 0):
  702. if(start % 2 == 1):
  703. start += 1
  704. else:
  705. start >> 1
  706. lim+= 1
  707. if(lim > 50):
  708. return -1
  709.  
  710. def minRec(f):
  711. factors = pf(f)
  712. if(len(factors) == 1):
  713. return ab(1,f)
  714. else:
  715. small = min(factors)
  716. return ab(small, f//small)
  717.  
  718.  
  719.  
  720. def test(a,b):
  721. goal = ab(a,b)[8]
  722. e,n,d,x,a,b,c,dn,xn,f,r,br,ggg = ab(1,a*b)
  723. options = [sqrt(f), gcd(xn,f), gcd(f,d), f*2-1, n%f, e%f, e>>1, f>>1, f<<1,
  724. f<<1 + 1, e<<1, e<<1+1]
  725. stri = []
  726. for i in range(len(options)):
  727. if(options[i] == goal):
  728. stri.append(i)
  729. return stri
  730.  
  731.  
  732. def reduce(c):
  733. return rebuild(makeTree(c))
  734.  
  735. def rebuild(tree):
  736. if(type(tree) is int):
  737. return tree
  738. if(len(tree) == 1):
  739. return tree[0]
  740. return rebuild(tree[0])**2 + rebuild(tree[1])
  741.  
  742. def isSquare(n):
  743. d = sqrt(n)
  744. return n-d*d == 0
  745.  
  746. def checkXn(c,xn):
  747. return isSquare(c+xn*xn)
  748.  
  749. def findE1(e):
  750. recs = []
  751. for i in range(e%2, 50, 2):
  752. recs.append(enx(e,1,i))
  753. printRecs(recs)
  754.  
  755.  
  756.  
  757. def makeRecs():
  758. recDic = {}
  759. # Cases:
  760. # 0 = (x+n) odd and e odd
  761. # 1 = (x+n) odd and e even
  762. # 2 = (x+n) even and e odd
  763. # 3 = (x+n) even and e even
  764.  
  765. for i in range(4):
  766. recDic[i] = []
  767. for i in primes:
  768. for j in primes:
  769. if(i<j):
  770. rec = ab(1,i*j)
  771. goal = ab(i,j)
  772. e,n,d,x,a,b,c,dn,xn,f,rr,br,gc = ab(1,i*j)
  773. if(xn%2 == 1 and e%2 == 1):
  774. recDic[0].append(rec)
  775. recDic[0].append(goal)
  776.  
  777. if(xn%2 == 1 and e%2 == 0):
  778. recDic[1].append(rec)
  779. recDic[1].append(goal)
  780.  
  781. if(xn%2 == 0 and e%2 == 1):
  782. recDic[2].append(rec)
  783. recDic[2].append(goal)
  784.  
  785. if(xn%2 == 0 and e%2 == 0):
  786. recDic[3].append(rec)
  787. recDic[3].append(goal)
  788. return recDic
  789.  
  790. def n1Recs(e,lim):
  791. part = e & 1
  792. recs = []
  793. for i in range(lim):
  794. recs.append(enx(e,1,i*2+part))
  795. return recs
  796.  
  797. def goodGo(a,b):
  798. start = ab(1,a*b)
  799. recs = [start, ab(a,b)]
  800. dd = start[2]
  801. nn = start[1]
  802. other = n1Recs(recs[0][0], 30)
  803. for rec in other:
  804. recs.append(rec)
  805. printRecs(recs)
  806.  
  807.  
  808. def factor(c):
  809. d = sqrt(c)
  810. e = c-d*d
  811. x = d-1
  812. n = (x*x + e)//2
  813.  
  814. GCD = 1
  815. t = 0
  816. eo = e%2
  817.  
  818. while(GCD == 1 or c%GCD != 0):
  819. x = 2*t + e%2
  820. A = (x*x + e)//2
  821. D = A + x
  822. GCD = gcd((D-d)%(n-1), A%n)
  823. t+=1
  824.  
  825. return d-x
  826.  
  827. def printValues(categories, values, returnString = False):
  828. lens = []
  829. for name in categories:
  830. if(len(name) > 5):
  831. lens.append(len(name))
  832. else:
  833. lens.append(5)
  834.  
  835. for i in range(len(categories)):
  836. for value in values:
  837. if(len(str(value[i])) > lens[i]):
  838. lens[i] = len(str(value[i]))
  839.  
  840. string = ""
  841. for i in range(len(categories)):
  842. string += " "*(lens[i] - len(categories[i])) + categories[i]+ "|"
  843. string += "\n" + "-"*len(string) + "\n"
  844. for value in values:
  845. for i in range(len(categories)):
  846. string += " "*(lens[i]-len(str(value[i]))) + str(value[i]) + "|"
  847. string += "\n"
  848. if(returnString):
  849. return string
  850. print(string)
  851.  
  852.  
  853.  
  854. def go(a,b):
  855. rec = ab(1,a*b)
  856. goal = ab(a,b)
  857. intermediate = enx(goal[0], 1, goal[3])
  858. printValues(Record.strs(),[rec, goal, intermediate, ena(rec[0], 1, rec[1]), ab(1,a*a*b*b)])
  859. samples = []
  860. for i in range(rec[0]%2,60,2):
  861. boii = enx(rec[0],1,i)
  862. val = boii.vals()
  863. val.append(boii[2]-rec[2])
  864. val.append(boii[4])
  865. val.append(gcd(boii[2]-rec[2],boii[4]))
  866. val.append((boii[2]-rec[2])%(rec[1]-1))
  867. val.append((boii[4]%rec[1]))
  868. samples.append(val)
  869.  
  870. strings = Record.strs()
  871. strings.append("D[t]-d")
  872. strings.append("A[t]")
  873. strings.append("GCD")
  874. strings.append("D[t]-d%(n-1)")
  875. strings.append("A[t]%n")
  876. printValues(strings,samples)
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899. #//////////////////////////
  900.  
  901. recordBook = {}
  902.  
  903. def generateSquare(record, squareWidth = 4):
  904. n = record[1]
  905. x = record[3]
  906. d = record[2]
  907. e = record[0]
  908. nn = n*n
  909. f = 2*d + 1 - e
  910. 2
  911. xn = x+n
  912. width = xn
  913. if(xn%2==0):
  914. return
  915.  
  916. vals = [n*n, (2*d-1)*(n-1), f-1, n-1]
  917.  
  918. red = (166,52,70)
  919. green = (96,211,148)
  920. yellow = (247,240,82)
  921. blue = (35,116,171)
  922. orange = (242,129,35)
  923.  
  924. colors = [blue, green, yellow, orange]
  925. divs = []
  926. mods = []
  927. for val in vals:
  928. divs.append(val//8)
  929. mods.append(val%8)
  930.  
  931.  
  932. miniSquares = [[0 for i in range(width)] for j in range(width)]
  933. center = xn//2
  934.  
  935. baseColors = []
  936. for j in range(len(divs)):
  937. for i in range(divs[j]):
  938. baseColors.append(colors[j])
  939. if(j == 1):
  940. baseColors.append(red)
  941. baseColors.append(red)
  942.  
  943. #draw triangles part
  944.  
  945. for triangle in range(1,9):
  946.  
  947. colorDex = 0
  948.  
  949. if(triangle in [2,3,6,7]): #horizontal drawing
  950. if(triangle == 2):
  951. xStart = center
  952. yStart = center - 1
  953. yDir = -1
  954. legDir = -1
  955. if(triangle == 3):
  956. xStart = center + 1
  957. yStart = center - 1
  958. yDir = -1
  959. legDir = 1
  960. if(triangle == 6):
  961. xStart = center - 1
  962. yStart = center + 1
  963. yDir = 1
  964. legDir = -1
  965. if(triangle == 7):
  966. xStart = center
  967. yStart = center + 1
  968. yDir = 1
  969. legDir = 1
  970.  
  971. for y in range(1,center+1):
  972. for x in range(y):
  973. xCoord = xStart + (legDir * x)
  974. yCoord = (yStart + (yDir) * (y-1))
  975. miniSquares[yCoord][xCoord] = baseColors[colorDex]
  976. colorDex += 1
  977. else:
  978. if(triangle == 1):
  979. xStart = center - 1
  980. yStart = center - 1
  981. xDir = -1
  982. legDir = -1
  983. if(triangle == 4):
  984. xStart = center + 1
  985. yStart = center
  986. xDir = 1
  987. legDir = -1
  988. if(triangle == 5):
  989. xStart = center - 1
  990. yStart = center
  991. xDir = -1
  992. legDir = 1
  993. if(triangle == 8):
  994. xStart = center + 1
  995. yStart = center + 1
  996. xDir = 1
  997. legDir = 1
  998.  
  999.  
  1000. for x in range(1,center+1):
  1001. for y in range(x):
  1002. xCoord = xStart + (xDir * (x-1))
  1003. yCoord = yStart + (legDir * y)
  1004. miniSquares[yCoord][xCoord] = baseColors[colorDex]
  1005. colorDex += 1
  1006. res = makeSquare(squareWidth,width,miniSquares)
  1007. return res
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017. def makeSquare(squareWidth, squares, entries):
  1018. totalWidth = (squares-1) + squareWidth*(squares)
  1019.  
  1020. img = Image.new('RGB', (totalWidth,totalWidth))
  1021. draw = ImageDraw.Draw(img)
  1022.  
  1023. for i in range(len(entries)):
  1024. row = entries[i]
  1025. for j in range(len(row)):
  1026. color = row[j]
  1027. fillSquare(j,i,squareWidth,draw, color)
  1028. return img
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034. def fillSquare(x,y,squareWidth, draw, color):
  1035. xPix = x*(squareWidth + 1)
  1036. yPix = y*(squareWidth + 1)
  1037. draw.rectangle( ((xPix,yPix),(xPix + squareWidth, yPix + squareWidth)), fill = color)
  1038.  
  1039.  
  1040.  
  1041.  
  1042. def newGenerateCGif(cLim):
  1043. i_min = -100
  1044. i_max = 300
  1045. j_min = -100
  1046. j_max = 100
  1047.  
  1048. width = i_max - i_min
  1049. height = j_max - j_min
  1050.  
  1051. bounds = (i_min, i_max, j_min, j_max)
  1052. imgs = []
  1053.  
  1054. for i in range(1,cLim):
  1055. nextPic = Image.new('RGB', (width,height))
  1056. imgs.append(nextPic)
  1057.  
  1058. for img in imgs:
  1059. for dcoords in DGrid:
  1060. if(inBounds(dcoords,bounds)):
  1061. img.putpixel(endToPic(dcoords,bounds),(255,255,255))
  1062. flip = (-dcoords[0], dcoords[1])
  1063. if(inBounds(flip,bounds)):
  1064. img.putpixel(endToPic(flip,bounds),(100,100,255))
  1065.  
  1066. for newProd in range(1,cLim):
  1067. dVal = int(math.sqrt(newProd))
  1068.  
  1069. eLine = square(dVal)
  1070. nLine = dVal
  1071. for i in range(width):
  1072. cord = (eLine,i)
  1073. if(inBounds(cord,bounds)):
  1074. imgs[newProd-1].putpixel(endToPic(cord,bounds), (200,200,0))
  1075. for i in range(height):
  1076. cord = (i,nLine)
  1077. if(inBounds(cord,bounds)):
  1078. imgs[newProd-1].putpixel(endToPic(cord,bounds),(200,200,0))
  1079.  
  1080. for factor in range(1,newProd):
  1081. factors = [1,-1]
  1082. if(newProd % factor == 0):
  1083. for sign in factors:
  1084. newRec = AB(factor*sign, sign*newProd/factor)
  1085. dVal = newRec[d]
  1086. newCoords = (newRec[e] + square(dVal), newRec[n] + dVal)
  1087. if(inBounds(newCoords, bounds)):
  1088. if(sign == 1):
  1089. color = (0,255,0)
  1090. else:
  1091. color = (255,0,0)
  1092. imgs[newProd-1].putpixel(endToPic(newCoords,bounds),color)
  1093.  
  1094. font = ImageFont.truetype("Arial.ttf",14)
  1095. for i in range(1,cLim):
  1096. draw = ImageDraw.Draw(imgs[i-1])
  1097. draw.text((20,height-20),"C = "+str(i),(255,255,255), font = font)
  1098. draw = ImageDraw.Draw(imgs[i-1])
  1099.  
  1100. fp = Image.new("RGB", (width,height))
  1101. fp.save("DGrid.gif", save_all = True, append_images = imgs, loop = True)
  1102. fp.close()
Advertisement
Add Comment
Please, Sign In to add comment