tests.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. def calc_sieve(limit):
  2. sieve = [False] * limit
  3. x = 1
  4. while x * x < limit:
  5. y = 1
  6. while y * y < limit:
  7. # Main part of
  8. # Sieve of Atkin
  9. n = (4 * x * x) + (y * y)
  10. if (n <= limit and (n % 12 == 1 or n % 12 == 5)):
  11. print('A%04x[%05d] ' % (n, n), end='')
  12. sieve[n] ^= True
  13. if n == 11:
  14. print('5!')
  15. pass
  16. n = (3 * x * x) + (y * y)
  17. if n <= limit and n % 12 == 7:
  18. print('B%04x[%05d] ' % (n, n), end='')
  19. sieve[n] ^= True
  20. if n == 11:
  21. print('5!')
  22. pass
  23. n = (3 * x * x) - (y * y)
  24. if x > y:
  25. # print('%04x' % n, end='')
  26. if n <= limit and n % 12 == 11:
  27. print('C%04x[%05d] ' % (n, n), end='')
  28. # print('!', end='')
  29. sieve[n] ^= True
  30. if n == 11:
  31. print('5!')
  32. pass
  33. # print(' ', end='')
  34. y += 1
  35. x += 1
  36. # print('')
  37. # Mark all multiples of
  38. # squares as non-prime
  39. r = 5
  40. for r in range(r, 16):
  41. # print('R%d ' % r, end='')
  42. if sieve[r]:
  43. for i in range(r * r, limit, r * r):
  44. # print('D%d ' % i, end='')
  45. sieve[i] = False
  46. # Print primes
  47. # using sieve[]
  48. for i, v in enumerate(sieve):
  49. print('1' if v else '0', end='')
  50. if (i % 16) == 0:
  51. print(' ', end='')
  52. elif (i % 8) == 0:
  53. print('_', end='')
  54. print('\nDONE')
  55. for a in range(5, limit):
  56. if sieve[a]:
  57. print(a, end=" ")
  58. """
  59. FULL:
  60. 0000 0000 0000 0000 0000 0000 0000 2208 2A80 0880 A200 2880 8AA0 A020 0A08 0280
  61. A228 0A00 8A80 2028 2288 88A0 A028 DF02 1010 0000 0D00 2E0A 6D2E 7465 7973 2073
  62. 306D 1B5B 5343 4F49 366D 5B33 6D1B 5B31 201B 6E67 7469 6F6F 4842 1B5B 1B63 0000
  63. 0123 4567 89AB CDEF
  64. 1010 0001 0000 0001 0000
  65. DF02 1101 1111 0000 0010
  66. A028 1010 0000 0010 1000 00001010_00101000
  67. 88A0 1000 1000 1010 0000 10100010_10001010
  68. 2288 10 0010 1000 1000 00001000_10100010
  69. EMPTY:
  70. 0000000000000000000000000000000000000000000000000000000000000000
  71. 00000000000000000000000000000000000000000D002E0A6D2E746579732073
  72. 306D1B5B53434F49366D5B336D1B5B31201B6E6774696F6F48421B5B1B630000
  73. 5 7 13 19 29 53 67 85 103 125 173 199 229 17 11 25 41 65 97 137 185 241 37 31 23 43 61 85 91 127 157 205 223 65 47 73 89 113 145 185 233 101 79 71 109 91 59 125 149 139 181 175 221 145 107 169 83 193 197 151 143 205 163 131 221 245 211 247 191 167 143 247 239 227 179 251
  74. A5 B7 A13 B19 A29 A53 B67 A85 B103 A125 A173 B199 A229 A17 C11 A25 A41 A65 A97 A137 A185 A241 A37 B31 C23 B43 A61 A85 B91 B127 A157 A205 B223 A65 C47 A73 A89 A113 A145 A185 A233 A101 B79 C71 A109 B91 C59 A125 A149 B139 A181 B175 A221 A145 C107 A169 C83 A193 A197 B151 C143 A205 B163 C131 A221 A245 B211 B247 C191 C167 C143 B247 C239 C227 C179 C251
  75. 5 7 11 13 17 19 23 25 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 169 173 175 179 181 191 193 197 199 211 223 227 229 233 239 241 245 251
  76. 5 7 11 13 19 23 29 31 33 37 43 47 53 59 61 65 67 71 79 81 83 97 101 103 107 109 113 127 129 131 139 149 151 157 161 163 167 173 175 179 181 191 193 197 199 211 223 225 227 229 239 241 245 251
  77. 5 7 11 13 17 19 23 25 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 169 173 175 179 181 191 193 197 199 211 223 227 229 233 239 241 245 251
  78. 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251
  79. """
  80. """
  81. ROM0:
  82. """
  83. def rus_peasant(A, B):
  84. """
  85. X = B;
  86. while (X <= A/2) X <<= 1;
  87. while (A >= B) {
  88. if (A >= X) A -= X;
  89. X >>= 1;
  90. }
  91. Modulus in A
  92. :param a:
  93. :param b:
  94. :return:
  95. """
  96. X = B
  97. print('0: {:04X} {:04X}'.format(A, B))
  98. while X <= A // 2:
  99. X <<= 1
  100. print('X: {:04X}'.format(X))
  101. print('A: {:04X} {:04X} {:04X}'.format(A//2, X, B))
  102. while A >= B:
  103. if A >= X:
  104. A -= X
  105. X >>= 1
  106. print('B: {:04X} {:04X}'.format(A, X))
  107. return A, X
  108. '''
  109. 029A 0030
  110. 029A 0030
  111. 014D 0180
  112. 029A 0180 <-- A
  113. 011A 0040
  114. 00DA 0020
  115. 00BA 0010
  116. 00AA 0008
  117. 00A2 0004
  118. 009E 0002
  119. 009C 0001
  120. '''
  121. def div16(a, b):
  122. from bitstring import BitArray
  123. ab = bin(a)[2:]
  124. ab = '0'*(16-len(ab)) + ab
  125. bb = bin(b)[2:]
  126. bb = '0' * (8 - len(bb)) + bb
  127. N = BitArray(bin=ab)
  128. D = BitArray(bin=bb)
  129. R = BitArray(16)
  130. Q = BitArray(16)
  131. for i in range(16):
  132. R = R << 1
  133. R[15] = N[i]
  134. print(f'i={i:2d} R={R.hex} N={N.hex} D={D.hex}', end='')
  135. if R.uint >= D.uint:
  136. R = BitArray(bin=bin(R.uint - D.uint))
  137. R = BitArray(bin="0" * (16 - len(R)) + R.bin)
  138. Q[i] = True
  139. print(f' R2={R.hex} Q={Q.hex}', end='')
  140. print()
  141. return Q.uint, R.uint
  142. def div8(a, b):
  143. from bitstring import BitArray
  144. ab = bin(a)[2:]
  145. ab = '0' * (17 - len(ab)) + ab
  146. bb = bin(b)[2:]
  147. bb = '0' * (9 - len(bb)) + bb
  148. rd1 = BitArray(bin=ab)
  149. rd2 = BitArray(bin=bb)
  150. re = BitArray(bin="0 0000 0000 0000 0000")
  151. rd1u = BitArray(bin="0 0000 0000")
  152. c = False
  153. while not c:
  154. rd1 = rd1 << 1
  155. rd1u = rd1u << 1
  156. rd1u[-1] = rd1[0]
  157. c = rd1u[0]
  158. __rd1 = rd1u[1:-1].uint
  159. __rd2 = rd2[1:-1].uint
  160. if c:
  161. # jump to div8b
  162. rd1u = BitArray(bin=bin(__rd1 - __rd2))
  163. rd1u = BitArray(bin="0" * (9 - len(rd1u)) + rd1u.bin)
  164. c = True
  165. elif __rd1 > __rd2:
  166. # jump to div8b
  167. rd1u = BitArray(bin=bin(__rd1 - __rd2))
  168. rd1u = BitArray(bin="0" * (9 - len(rd1u)) + rd1u.bin)
  169. c = True
  170. else:
  171. c = False
  172. re = re << 1
  173. re[-1] = c
  174. c = re[0]
  175. return re[1:-1].uint
  176. if __name__ == '__main__':
  177. d, r = div16(50000, 2)
  178. print("%x [%d] and %x [%d]" % (d, d, r, r))
  179. # pass
  180. # calc_sieve(2**16)
  181. # calc(255)
  182. # res = rus_peasant(666, 48)[0]
  183. # print('{:04X}'.format(res))