Coverage for /usr/lib/python3/dist-packages/mpmath/functions/zetazeros.py: 6%

379 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 15:55 +0200

1""" 

2The function zetazero(n) computes the n-th nontrivial zero of zeta(s). 

3 

4The general strategy is to locate a block of Gram intervals B where we 

5know exactly the number of zeros contained and which of those zeros 

6is that which we search. 

7 

8If n <= 400 000 000 we know exactly the Rosser exceptions, contained 

9in a list in this file. Hence for n<=400 000 000 we simply 

10look at these list of exceptions. If our zero is implicated in one of 

11these exceptions we have our block B. In other case we simply locate 

12the good Rosser block containing our zero. 

13 

14For n > 400 000 000 we apply the method of Turing, as complemented by 

15Lehman, Brent and Trudgian to find a suitable B. 

16""" 

17 

18from .functions import defun, defun_wrapped 

19 

20def find_rosser_block_zero(ctx, n): 

21 """for n<400 000 000 determines a block were one find our zero""" 

22 for k in range(len(_ROSSER_EXCEPTIONS)//2): 

23 a=_ROSSER_EXCEPTIONS[2*k][0] 

24 b=_ROSSER_EXCEPTIONS[2*k][1] 

25 if ((a<= n-2) and (n-1 <= b)): 

26 t0 = ctx.grampoint(a) 

27 t1 = ctx.grampoint(b) 

28 v0 = ctx._fp.siegelz(t0) 

29 v1 = ctx._fp.siegelz(t1) 

30 my_zero_number = n-a-1 

31 zero_number_block = b-a 

32 pattern = _ROSSER_EXCEPTIONS[2*k+1] 

33 return (my_zero_number, [a,b], [t0,t1], [v0,v1]) 

34 k = n-2 

35 t,v,b = compute_triple_tvb(ctx, k) 

36 T = [t] 

37 V = [v] 

38 while b < 0: 

39 k -= 1 

40 t,v,b = compute_triple_tvb(ctx, k) 

41 T.insert(0,t) 

42 V.insert(0,v) 

43 my_zero_number = n-k-1 

44 m = n-1 

45 t,v,b = compute_triple_tvb(ctx, m) 

46 T.append(t) 

47 V.append(v) 

48 while b < 0: 

49 m += 1 

50 t,v,b = compute_triple_tvb(ctx, m) 

51 T.append(t) 

52 V.append(v) 

53 return (my_zero_number, [k,m], T, V) 

54 

55def wpzeros(t): 

56 """Precision needed to compute higher zeros""" 

57 wp = 53 

58 if t > 3*10**8: 

59 wp = 63 

60 if t > 10**11: 

61 wp = 70 

62 if t > 10**14: 

63 wp = 83 

64 return wp 

65 

66def separate_zeros_in_block(ctx, zero_number_block, T, V, limitloop=None, 

67 fp_tolerance=None): 

68 """Separate the zeros contained in the block T, limitloop 

69 determines how long one must search""" 

70 if limitloop is None: 

71 limitloop = ctx.inf 

72 loopnumber = 0 

73 variations = count_variations(V) 

74 while ((variations < zero_number_block) and (loopnumber <limitloop)): 

75 a = T[0] 

76 v = V[0] 

77 newT = [a] 

78 newV = [v] 

79 variations = 0 

80 for n in range(1,len(T)): 

81 b2 = T[n] 

82 u = V[n] 

83 if (u*v>0): 

84 alpha = ctx.sqrt(u/v) 

85 b= (alpha*a+b2)/(alpha+1) 

86 else: 

87 b = (a+b2)/2 

88 if fp_tolerance < 10: 

89 w = ctx._fp.siegelz(b) 

90 if abs(w)<fp_tolerance: 

91 w = ctx.siegelz(b) 

92 else: 

93 w=ctx.siegelz(b) 

94 if v*w<0: 

95 variations += 1 

96 newT.append(b) 

97 newV.append(w) 

98 u = V[n] 

99 if u*w <0: 

100 variations += 1 

101 newT.append(b2) 

102 newV.append(u) 

103 a = b2 

104 v = u 

105 T = newT 

106 V = newV 

107 loopnumber +=1 

108 if (limitloop>ITERATION_LIMIT)and(loopnumber>2)and(variations+2==zero_number_block): 

109 dtMax=0 

110 dtSec=0 

111 kMax = 0 

112 for k1 in range(1,len(T)): 

113 dt = T[k1]-T[k1-1] 

114 if dt > dtMax: 

115 kMax=k1 

116 dtSec = dtMax 

117 dtMax = dt 

118 elif (dt<dtMax) and(dt >dtSec): 

119 dtSec = dt 

120 if dtMax>3*dtSec: 

121 f = lambda x: ctx.rs_z(x,derivative=1) 

122 t0=T[kMax-1] 

123 t1 = T[kMax] 

124 t=ctx.findroot(f, (t0,t1), solver ='illinois',verify=False, verbose=False) 

125 v = ctx.siegelz(t) 

126 if (t0<t) and (t<t1) and (v*V[kMax]<0): 

127 T.insert(kMax,t) 

128 V.insert(kMax,v) 

129 variations = count_variations(V) 

130 if variations == zero_number_block: 

131 separated = True 

132 else: 

133 separated = False 

134 return (T,V, separated) 

135 

136def separate_my_zero(ctx, my_zero_number, zero_number_block, T, V, prec): 

137 """If we know which zero of this block is mine, 

138 the function separates the zero""" 

139 variations = 0 

140 v0 = V[0] 

141 for k in range(1,len(V)): 

142 v1 = V[k] 

143 if v0*v1 < 0: 

144 variations +=1 

145 if variations == my_zero_number: 

146 k0 = k 

147 leftv = v0 

148 rightv = v1 

149 v0 = v1 

150 t1 = T[k0] 

151 t0 = T[k0-1] 

152 ctx.prec = prec 

153 wpz = wpzeros(my_zero_number*ctx.log(my_zero_number)) 

154 

155 guard = 4*ctx.mag(my_zero_number) 

156 precs = [ctx.prec+4] 

157 index=0 

158 while precs[0] > 2*wpz: 

159 index +=1 

160 precs = [precs[0] // 2 +3+2*index] + precs 

161 ctx.prec = precs[0] + guard 

162 r = ctx.findroot(lambda x:ctx.siegelz(x), (t0,t1), solver ='illinois', verbose=False) 

163 #print "first step at", ctx.dps, "digits" 

164 z=ctx.mpc(0.5,r) 

165 for prec in precs[1:]: 

166 ctx.prec = prec + guard 

167 #print "refining to", ctx.dps, "digits" 

168 znew = z - ctx.zeta(z) / ctx.zeta(z, derivative=1) 

169 #print "difference", ctx.nstr(abs(z-znew)) 

170 z=ctx.mpc(0.5,ctx.im(znew)) 

171 return ctx.im(z) 

172 

173def sure_number_block(ctx, n): 

174 """The number of good Rosser blocks needed to apply 

175 Turing method 

176 References: 

177 R. P. Brent, On the Zeros of the Riemann Zeta Function 

178 in the Critical Strip, Math. Comp. 33 (1979) 1361--1372 

179 T. Trudgian, Improvements to Turing Method, Math. Comp.""" 

180 if n < 9*10**5: 

181 return(2) 

182 g = ctx.grampoint(n-100) 

183 lg = ctx._fp.ln(g) 

184 brent = 0.0061 * lg**2 +0.08*lg 

185 trudgian = 0.0031 * lg**2 +0.11*lg 

186 N = ctx.ceil(min(brent,trudgian)) 

187 N = int(N) 

188 return N 

189 

190def compute_triple_tvb(ctx, n): 

191 t = ctx.grampoint(n) 

192 v = ctx._fp.siegelz(t) 

193 if ctx.mag(abs(v))<ctx.mag(t)-45: 

194 v = ctx.siegelz(t) 

195 b = v*(-1)**n 

196 return t,v,b 

197 

198 

199 

200ITERATION_LIMIT = 4 

201 

202def search_supergood_block(ctx, n, fp_tolerance): 

203 """To use for n>400 000 000""" 

204 sb = sure_number_block(ctx, n) 

205 number_goodblocks = 0 

206 m2 = n-1 

207 t, v, b = compute_triple_tvb(ctx, m2) 

208 Tf = [t] 

209 Vf = [v] 

210 while b < 0: 

211 m2 += 1 

212 t,v,b = compute_triple_tvb(ctx, m2) 

213 Tf.append(t) 

214 Vf.append(v) 

215 goodpoints = [m2] 

216 T = [t] 

217 V = [v] 

218 while number_goodblocks < 2*sb: 

219 m2 += 1 

220 t, v, b = compute_triple_tvb(ctx, m2) 

221 T.append(t) 

222 V.append(v) 

223 while b < 0: 

224 m2 += 1 

225 t,v,b = compute_triple_tvb(ctx, m2) 

226 T.append(t) 

227 V.append(v) 

228 goodpoints.append(m2) 

229 zn = len(T)-1 

230 A, B, separated =\ 

231 separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT, 

232 fp_tolerance=fp_tolerance) 

233 Tf.pop() 

234 Tf.extend(A) 

235 Vf.pop() 

236 Vf.extend(B) 

237 if separated: 

238 number_goodblocks += 1 

239 else: 

240 number_goodblocks = 0 

241 T = [t] 

242 V = [v] 

243 # Now the same procedure to the left 

244 number_goodblocks = 0 

245 m2 = n-2 

246 t, v, b = compute_triple_tvb(ctx, m2) 

247 Tf.insert(0,t) 

248 Vf.insert(0,v) 

249 while b < 0: 

250 m2 -= 1 

251 t,v,b = compute_triple_tvb(ctx, m2) 

252 Tf.insert(0,t) 

253 Vf.insert(0,v) 

254 goodpoints.insert(0,m2) 

255 T = [t] 

256 V = [v] 

257 while number_goodblocks < 2*sb: 

258 m2 -= 1 

259 t, v, b = compute_triple_tvb(ctx, m2) 

260 T.insert(0,t) 

261 V.insert(0,v) 

262 while b < 0: 

263 m2 -= 1 

264 t,v,b = compute_triple_tvb(ctx, m2) 

265 T.insert(0,t) 

266 V.insert(0,v) 

267 goodpoints.insert(0,m2) 

268 zn = len(T)-1 

269 A, B, separated =\ 

270 separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance) 

271 A.pop() 

272 Tf = A+Tf 

273 B.pop() 

274 Vf = B+Vf 

275 if separated: 

276 number_goodblocks += 1 

277 else: 

278 number_goodblocks = 0 

279 T = [t] 

280 V = [v] 

281 r = goodpoints[2*sb] 

282 lg = len(goodpoints) 

283 s = goodpoints[lg-2*sb-1] 

284 tr, vr, br = compute_triple_tvb(ctx, r) 

285 ar = Tf.index(tr) 

286 ts, vs, bs = compute_triple_tvb(ctx, s) 

287 as1 = Tf.index(ts) 

288 T = Tf[ar:as1+1] 

289 V = Vf[ar:as1+1] 

290 zn = s-r 

291 A, B, separated =\ 

292 separate_zeros_in_block(ctx, zn,T,V,limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance) 

293 if separated: 

294 return (n-r-1,[r,s],A,B) 

295 q = goodpoints[sb] 

296 lg = len(goodpoints) 

297 t = goodpoints[lg-sb-1] 

298 tq, vq, bq = compute_triple_tvb(ctx, q) 

299 aq = Tf.index(tq) 

300 tt, vt, bt = compute_triple_tvb(ctx, t) 

301 at = Tf.index(tt) 

302 T = Tf[aq:at+1] 

303 V = Vf[aq:at+1] 

304 return (n-q-1,[q,t],T,V) 

305 

306def count_variations(V): 

307 count = 0 

308 vold = V[0] 

309 for n in range(1, len(V)): 

310 vnew = V[n] 

311 if vold*vnew < 0: 

312 count +=1 

313 vold = vnew 

314 return count 

315 

316def pattern_construct(ctx, block, T, V): 

317 pattern = '(' 

318 a = block[0] 

319 b = block[1] 

320 t0,v0,b0 = compute_triple_tvb(ctx, a) 

321 k = 0 

322 k0 = 0 

323 for n in range(a+1,b+1): 

324 t1,v1,b1 = compute_triple_tvb(ctx, n) 

325 lgT =len(T) 

326 while (k < lgT) and (T[k] <= t1): 

327 k += 1 

328 L = V[k0:k] 

329 L.append(v1) 

330 L.insert(0,v0) 

331 count = count_variations(L) 

332 pattern = pattern + ("%s" % count) 

333 if b1 > 0: 

334 pattern = pattern + ')(' 

335 k0 = k 

336 t0,v0,b0 = t1,v1,b1 

337 pattern = pattern[:-1] 

338 return pattern 

339 

340@defun 

341def zetazero(ctx, n, info=False, round=True): 

342 r""" 

343 Computes the `n`-th nontrivial zero of `\zeta(s)` on the critical line, 

344 i.e. returns an approximation of the `n`-th largest complex number 

345 `s = \frac{1}{2} + ti` for which `\zeta(s) = 0`. Equivalently, the 

346 imaginary part `t` is a zero of the Z-function (:func:`~mpmath.siegelz`). 

347 

348 **Examples** 

349 

350 The first few zeros:: 

351 

352 >>> from mpmath import * 

353 >>> mp.dps = 25; mp.pretty = True 

354 >>> zetazero(1) 

355 (0.5 + 14.13472514173469379045725j) 

356 >>> zetazero(2) 

357 (0.5 + 21.02203963877155499262848j) 

358 >>> zetazero(20) 

359 (0.5 + 77.14484006887480537268266j) 

360 

361 Verifying that the values are zeros:: 

362 

363 >>> for n in range(1,5): 

364 ... s = zetazero(n) 

365 ... chop(zeta(s)), chop(siegelz(s.imag)) 

366 ... 

367 (0.0, 0.0) 

368 (0.0, 0.0) 

369 (0.0, 0.0) 

370 (0.0, 0.0) 

371 

372 Negative indices give the conjugate zeros (`n = 0` is undefined):: 

373 

374 >>> zetazero(-1) 

375 (0.5 - 14.13472514173469379045725j) 

376 

377 :func:`~mpmath.zetazero` supports arbitrarily large `n` and arbitrary precision:: 

378 

379 >>> mp.dps = 15 

380 >>> zetazero(1234567) 

381 (0.5 + 727690.906948208j) 

382 >>> mp.dps = 50 

383 >>> zetazero(1234567) 

384 (0.5 + 727690.9069482075392389420041147142092708393819935j) 

385 >>> chop(zeta(_)/_) 

386 0.0 

387 

388 with *info=True*, :func:`~mpmath.zetazero` gives additional information:: 

389 

390 >>> mp.dps = 15 

391 >>> zetazero(542964976,info=True) 

392 ((0.5 + 209039046.578535j), [542964969, 542964978], 6, '(013111110)') 

393 

394 This means that the zero is between Gram points 542964969 and 542964978; 

395 it is the 6-th zero between them. Finally (01311110) is the pattern 

396 of zeros in this interval. The numbers indicate the number of zeros 

397 in each Gram interval (Rosser blocks between parenthesis). In this case 

398 there is only one Rosser block of length nine. 

399 """ 

400 n = int(n) 

401 if n < 0: 

402 return ctx.zetazero(-n).conjugate() 

403 if n == 0: 

404 raise ValueError("n must be nonzero") 

405 wpinitial = ctx.prec 

406 try: 

407 wpz, fp_tolerance = comp_fp_tolerance(ctx, n) 

408 ctx.prec = wpz 

409 if n < 400000000: 

410 my_zero_number, block, T, V =\ 

411 find_rosser_block_zero(ctx, n) 

412 else: 

413 my_zero_number, block, T, V =\ 

414 search_supergood_block(ctx, n, fp_tolerance) 

415 zero_number_block = block[1]-block[0] 

416 T, V, separated = separate_zeros_in_block(ctx, zero_number_block, T, V, 

417 limitloop=ctx.inf, fp_tolerance=fp_tolerance) 

418 if info: 

419 pattern = pattern_construct(ctx,block,T,V) 

420 prec = max(wpinitial, wpz) 

421 t = separate_my_zero(ctx, my_zero_number, zero_number_block,T,V,prec) 

422 v = ctx.mpc(0.5,t) 

423 finally: 

424 ctx.prec = wpinitial 

425 if round: 

426 v =+v 

427 if info: 

428 return (v,block,my_zero_number,pattern) 

429 else: 

430 return v 

431 

432def gram_index(ctx, t): 

433 if t > 10**13: 

434 wp = 3*ctx.log(t, 10) 

435 else: 

436 wp = 0 

437 prec = ctx.prec 

438 try: 

439 ctx.prec += wp 

440 h = int(ctx.siegeltheta(t)/ctx.pi) 

441 finally: 

442 ctx.prec = prec 

443 return(h) 

444 

445def count_to(ctx, t, T, V): 

446 count = 0 

447 vold = V[0] 

448 told = T[0] 

449 tnew = T[1] 

450 k = 1 

451 while tnew < t: 

452 vnew = V[k] 

453 if vold*vnew < 0: 

454 count += 1 

455 vold = vnew 

456 k += 1 

457 tnew = T[k] 

458 a = ctx.siegelz(t) 

459 if a*vold < 0: 

460 count += 1 

461 return count 

462 

463def comp_fp_tolerance(ctx, n): 

464 wpz = wpzeros(n*ctx.log(n)) 

465 if n < 15*10**8: 

466 fp_tolerance = 0.0005 

467 elif n <= 10**14: 

468 fp_tolerance = 0.1 

469 else: 

470 fp_tolerance = 100 

471 return wpz, fp_tolerance 

472 

473@defun 

474def nzeros(ctx, t): 

475 r""" 

476 Computes the number of zeros of the Riemann zeta function in 

477 `(0,1) \times (0,t]`, usually denoted by `N(t)`. 

478 

479 **Examples** 

480 

481 The first zero has imaginary part between 14 and 15:: 

482 

483 >>> from mpmath import * 

484 >>> mp.dps = 15; mp.pretty = True 

485 >>> nzeros(14) 

486 0 

487 >>> nzeros(15) 

488 1 

489 >>> zetazero(1) 

490 (0.5 + 14.1347251417347j) 

491 

492 Some closely spaced zeros:: 

493 

494 >>> nzeros(10**7) 

495 21136125 

496 >>> zetazero(21136125) 

497 (0.5 + 9999999.32718175j) 

498 >>> zetazero(21136126) 

499 (0.5 + 10000000.2400236j) 

500 >>> nzeros(545439823.215) 

501 1500000001 

502 >>> zetazero(1500000001) 

503 (0.5 + 545439823.201985j) 

504 >>> zetazero(1500000002) 

505 (0.5 + 545439823.325697j) 

506 

507 This confirms the data given by J. van de Lune, 

508 H. J. J. te Riele and D. T. Winter in 1986. 

509 """ 

510 if t < 14.1347251417347: 

511 return 0 

512 x = gram_index(ctx, t) 

513 k = int(ctx.floor(x)) 

514 wpinitial = ctx.prec 

515 wpz, fp_tolerance = comp_fp_tolerance(ctx, k) 

516 ctx.prec = wpz 

517 a = ctx.siegelz(t) 

518 if k == -1 and a < 0: 

519 return 0 

520 elif k == -1 and a > 0: 

521 return 1 

522 if k+2 < 400000000: 

523 Rblock = find_rosser_block_zero(ctx, k+2) 

524 else: 

525 Rblock = search_supergood_block(ctx, k+2, fp_tolerance) 

526 n1, n2 = Rblock[1] 

527 if n2-n1 == 1: 

528 b = Rblock[3][0] 

529 if a*b > 0: 

530 ctx.prec = wpinitial 

531 return k+1 

532 else: 

533 ctx.prec = wpinitial 

534 return k+2 

535 my_zero_number,block, T, V = Rblock 

536 zero_number_block = n2-n1 

537 T, V, separated = separate_zeros_in_block(ctx,\ 

538 zero_number_block, T, V,\ 

539 limitloop=ctx.inf,\ 

540 fp_tolerance=fp_tolerance) 

541 n = count_to(ctx, t, T, V) 

542 ctx.prec = wpinitial 

543 return n+n1+1 

544 

545@defun_wrapped 

546def backlunds(ctx, t): 

547 r""" 

548 Computes the function 

549 `S(t) = \operatorname{arg} \zeta(\frac{1}{2} + it) / \pi`. 

550 

551 See Titchmarsh Section 9.3 for details of the definition. 

552 

553 **Examples** 

554 

555 >>> from mpmath import * 

556 >>> mp.dps = 15; mp.pretty = True 

557 >>> backlunds(217.3) 

558 0.16302205431184 

559 

560 Generally, the value is a small number. At Gram points it is an integer, 

561 frequently equal to 0:: 

562 

563 >>> chop(backlunds(grampoint(200))) 

564 0.0 

565 >>> backlunds(extraprec(10)(grampoint)(211)) 

566 1.0 

567 >>> backlunds(extraprec(10)(grampoint)(232)) 

568 -1.0 

569 

570 The number of zeros of the Riemann zeta function up to height `t` 

571 satisfies `N(t) = \theta(t)/\pi + 1 + S(t)` (see :func:nzeros` and 

572 :func:`siegeltheta`):: 

573 

574 >>> t = 1234.55 

575 >>> nzeros(t) 

576 842 

577 >>> siegeltheta(t)/pi+1+backlunds(t) 

578 842.0 

579 

580 """ 

581 return ctx.nzeros(t)-1-ctx.siegeltheta(t)/ctx.pi 

582 

583 

584""" 

585_ROSSER_EXCEPTIONS is a list of all exceptions to 

586Rosser's rule for n <= 400 000 000. 

587 

588Alternately the entry is of type [n,m], or a string. 

589The string is the zero pattern of the Block and the relevant 

590adjacent. For example (010)3 corresponds to a block 

591composed of three Gram intervals, the first ant third without 

592a zero and the intermediate with a zero. The next Gram interval 

593contain three zeros. So that in total we have 4 zeros in 4 Gram 

594blocks. n and m are the indices of the Gram points of this 

595interval of four Gram intervals. The Rosser exception is therefore 

596formed by the three Gram intervals that are signaled between 

597parenthesis. 

598 

599We have included also some Rosser's exceptions beyond n=400 000 000 

600that are noted in the literature by some reason. 

601 

602The list is composed from the data published in the references: 

603 

604R. P. Brent, J. van de Lune, H. J. J. te Riele, D. T. Winter, 

605'On the Zeros of the Riemann Zeta Function in the Critical Strip. II', 

606Math. Comp. 39 (1982) 681--688. 

607See also Corrigenda in Math. Comp. 46 (1986) 771. 

608 

609J. van de Lune, H. J. J. te Riele, 

610'On the Zeros of the Riemann Zeta Function in the Critical Strip. III', 

611Math. Comp. 41 (1983) 759--767. 

612See also Corrigenda in Math. Comp. 46 (1986) 771. 

613 

614J. van de Lune, 

615'Sums of Equal Powers of Positive Integers', 

616Dissertation, 

617Vrije Universiteit te Amsterdam, Centrum voor Wiskunde en Informatica, 

618Amsterdam, 1984. 

619 

620Thanks to the authors all this papers and those others that have 

621contributed to make this possible. 

622""" 

623 

624 

625 

626 

627 

628 

629 

630_ROSSER_EXCEPTIONS = \ 

631[[13999525, 13999528], '(00)3', 

632[30783329, 30783332], '(00)3', 

633[30930926, 30930929], '3(00)', 

634[37592215, 37592218], '(00)3', 

635[40870156, 40870159], '(00)3', 

636[43628107, 43628110], '(00)3', 

637[46082042, 46082045], '(00)3', 

638[46875667, 46875670], '(00)3', 

639[49624540, 49624543], '3(00)', 

640[50799238, 50799241], '(00)3', 

641[55221453, 55221456], '3(00)', 

642[56948779, 56948782], '3(00)', 

643[60515663, 60515666], '(00)3', 

644[61331766, 61331770], '(00)40', 

645[69784843, 69784846], '3(00)', 

646[75052114, 75052117], '(00)3', 

647[79545240, 79545243], '3(00)', 

648[79652247, 79652250], '3(00)', 

649[83088043, 83088046], '(00)3', 

650[83689522, 83689525], '3(00)', 

651[85348958, 85348961], '(00)3', 

652[86513820, 86513823], '(00)3', 

653[87947596, 87947599], '3(00)', 

654[88600095, 88600098], '(00)3', 

655[93681183, 93681186], '(00)3', 

656[100316551, 100316554], '3(00)', 

657[100788444, 100788447], '(00)3', 

658[106236172, 106236175], '(00)3', 

659[106941327, 106941330], '3(00)', 

660[107287955, 107287958], '(00)3', 

661[107532016, 107532019], '3(00)', 

662[110571044, 110571047], '(00)3', 

663[111885253, 111885256], '3(00)', 

664[113239783, 113239786], '(00)3', 

665[120159903, 120159906], '(00)3', 

666[121424391, 121424394], '3(00)', 

667[121692931, 121692934], '3(00)', 

668[121934170, 121934173], '3(00)', 

669[122612848, 122612851], '3(00)', 

670[126116567, 126116570], '(00)3', 

671[127936513, 127936516], '(00)3', 

672[128710277, 128710280], '3(00)', 

673[129398902, 129398905], '3(00)', 

674[130461096, 130461099], '3(00)', 

675[131331947, 131331950], '3(00)', 

676[137334071, 137334074], '3(00)', 

677[137832603, 137832606], '(00)3', 

678[138799471, 138799474], '3(00)', 

679[139027791, 139027794], '(00)3', 

680[141617806, 141617809], '(00)3', 

681[144454931, 144454934], '(00)3', 

682[145402379, 145402382], '3(00)', 

683[146130245, 146130248], '3(00)', 

684[147059770, 147059773], '(00)3', 

685[147896099, 147896102], '3(00)', 

686[151097113, 151097116], '(00)3', 

687[152539438, 152539441], '(00)3', 

688[152863168, 152863171], '3(00)', 

689[153522726, 153522729], '3(00)', 

690[155171524, 155171527], '3(00)', 

691[155366607, 155366610], '(00)3', 

692[157260686, 157260689], '3(00)', 

693[157269224, 157269227], '(00)3', 

694[157755123, 157755126], '(00)3', 

695[158298484, 158298487], '3(00)', 

696[160369050, 160369053], '3(00)', 

697[162962787, 162962790], '(00)3', 

698[163724709, 163724712], '(00)3', 

699[164198113, 164198116], '3(00)', 

700[164689301, 164689305], '(00)40', 

701[164880228, 164880231], '3(00)', 

702[166201932, 166201935], '(00)3', 

703[168573836, 168573839], '(00)3', 

704[169750763, 169750766], '(00)3', 

705[170375507, 170375510], '(00)3', 

706[170704879, 170704882], '3(00)', 

707[172000992, 172000995], '3(00)', 

708[173289941, 173289944], '(00)3', 

709[173737613, 173737616], '3(00)', 

710[174102513, 174102516], '(00)3', 

711[174284990, 174284993], '(00)3', 

712[174500513, 174500516], '(00)3', 

713[175710609, 175710612], '(00)3', 

714[176870843, 176870846], '3(00)', 

715[177332732, 177332735], '3(00)', 

716[177902861, 177902864], '3(00)', 

717[179979095, 179979098], '(00)3', 

718[181233726, 181233729], '3(00)', 

719[181625435, 181625438], '(00)3', 

720[182105255, 182105259], '22(00)', 

721[182223559, 182223562], '3(00)', 

722[191116404, 191116407], '3(00)', 

723[191165599, 191165602], '3(00)', 

724[191297535, 191297539], '(00)22', 

725[192485616, 192485619], '(00)3', 

726[193264634, 193264638], '22(00)', 

727[194696968, 194696971], '(00)3', 

728[195876805, 195876808], '(00)3', 

729[195916548, 195916551], '3(00)', 

730[196395160, 196395163], '3(00)', 

731[196676303, 196676306], '(00)3', 

732[197889882, 197889885], '3(00)', 

733[198014122, 198014125], '(00)3', 

734[199235289, 199235292], '(00)3', 

735[201007375, 201007378], '(00)3', 

736[201030605, 201030608], '3(00)', 

737[201184290, 201184293], '3(00)', 

738[201685414, 201685418], '(00)22', 

739[202762875, 202762878], '3(00)', 

740[202860957, 202860960], '3(00)', 

741[203832577, 203832580], '3(00)', 

742[205880544, 205880547], '(00)3', 

743[206357111, 206357114], '(00)3', 

744[207159767, 207159770], '3(00)', 

745[207167343, 207167346], '3(00)', 

746[207482539, 207482543], '3(010)', 

747[207669540, 207669543], '3(00)', 

748[208053426, 208053429], '(00)3', 

749[208110027, 208110030], '3(00)', 

750[209513826, 209513829], '3(00)', 

751[212623522, 212623525], '(00)3', 

752[213841715, 213841718], '(00)3', 

753[214012333, 214012336], '(00)3', 

754[214073567, 214073570], '(00)3', 

755[215170600, 215170603], '3(00)', 

756[215881039, 215881042], '3(00)', 

757[216274604, 216274607], '3(00)', 

758[216957120, 216957123], '3(00)', 

759[217323208, 217323211], '(00)3', 

760[218799264, 218799267], '(00)3', 

761[218803557, 218803560], '3(00)', 

762[219735146, 219735149], '(00)3', 

763[219830062, 219830065], '3(00)', 

764[219897904, 219897907], '(00)3', 

765[221205545, 221205548], '(00)3', 

766[223601929, 223601932], '(00)3', 

767[223907076, 223907079], '3(00)', 

768[223970397, 223970400], '(00)3', 

769[224874044, 224874048], '22(00)', 

770[225291157, 225291160], '(00)3', 

771[227481734, 227481737], '(00)3', 

772[228006442, 228006445], '3(00)', 

773[228357900, 228357903], '(00)3', 

774[228386399, 228386402], '(00)3', 

775[228907446, 228907449], '(00)3', 

776[228984552, 228984555], '3(00)', 

777[229140285, 229140288], '3(00)', 

778[231810024, 231810027], '(00)3', 

779[232838062, 232838065], '3(00)', 

780[234389088, 234389091], '3(00)', 

781[235588194, 235588197], '(00)3', 

782[236645695, 236645698], '(00)3', 

783[236962876, 236962879], '3(00)', 

784[237516723, 237516727], '04(00)', 

785[240004911, 240004914], '(00)3', 

786[240221306, 240221309], '3(00)', 

787[241389213, 241389217], '(010)3', 

788[241549003, 241549006], '(00)3', 

789[241729717, 241729720], '(00)3', 

790[241743684, 241743687], '3(00)', 

791[243780200, 243780203], '3(00)', 

792[243801317, 243801320], '(00)3', 

793[244122072, 244122075], '(00)3', 

794[244691224, 244691227], '3(00)', 

795[244841577, 244841580], '(00)3', 

796[245813461, 245813464], '(00)3', 

797[246299475, 246299478], '(00)3', 

798[246450176, 246450179], '3(00)', 

799[249069349, 249069352], '(00)3', 

800[250076378, 250076381], '(00)3', 

801[252442157, 252442160], '3(00)', 

802[252904231, 252904234], '3(00)', 

803[255145220, 255145223], '(00)3', 

804[255285971, 255285974], '3(00)', 

805[256713230, 256713233], '(00)3', 

806[257992082, 257992085], '(00)3', 

807[258447955, 258447959], '22(00)', 

808[259298045, 259298048], '3(00)', 

809[262141503, 262141506], '(00)3', 

810[263681743, 263681746], '3(00)', 

811[266527881, 266527885], '(010)3', 

812[266617122, 266617125], '(00)3', 

813[266628044, 266628047], '3(00)', 

814[267305763, 267305766], '(00)3', 

815[267388404, 267388407], '3(00)', 

816[267441672, 267441675], '3(00)', 

817[267464886, 267464889], '(00)3', 

818[267554907, 267554910], '3(00)', 

819[269787480, 269787483], '(00)3', 

820[270881434, 270881437], '(00)3', 

821[270997583, 270997586], '3(00)', 

822[272096378, 272096381], '3(00)', 

823[272583009, 272583012], '(00)3', 

824[274190881, 274190884], '3(00)', 

825[274268747, 274268750], '(00)3', 

826[275297429, 275297432], '3(00)', 

827[275545476, 275545479], '3(00)', 

828[275898479, 275898482], '3(00)', 

829[275953000, 275953003], '(00)3', 

830[277117197, 277117201], '(00)22', 

831[277447310, 277447313], '3(00)', 

832[279059657, 279059660], '3(00)', 

833[279259144, 279259147], '3(00)', 

834[279513636, 279513639], '3(00)', 

835[279849069, 279849072], '3(00)', 

836[280291419, 280291422], '(00)3', 

837[281449425, 281449428], '3(00)', 

838[281507953, 281507956], '3(00)', 

839[281825600, 281825603], '(00)3', 

840[282547093, 282547096], '3(00)', 

841[283120963, 283120966], '3(00)', 

842[283323493, 283323496], '(00)3', 

843[284764535, 284764538], '3(00)', 

844[286172639, 286172642], '3(00)', 

845[286688824, 286688827], '(00)3', 

846[287222172, 287222175], '3(00)', 

847[287235534, 287235537], '3(00)', 

848[287304861, 287304864], '3(00)', 

849[287433571, 287433574], '(00)3', 

850[287823551, 287823554], '(00)3', 

851[287872422, 287872425], '3(00)', 

852[288766615, 288766618], '3(00)', 

853[290122963, 290122966], '3(00)', 

854[290450849, 290450853], '(00)22', 

855[291426141, 291426144], '3(00)', 

856[292810353, 292810356], '3(00)', 

857[293109861, 293109864], '3(00)', 

858[293398054, 293398057], '3(00)', 

859[294134426, 294134429], '3(00)', 

860[294216438, 294216441], '(00)3', 

861[295367141, 295367144], '3(00)', 

862[297834111, 297834114], '3(00)', 

863[299099969, 299099972], '3(00)', 

864[300746958, 300746961], '3(00)', 

865[301097423, 301097426], '(00)3', 

866[301834209, 301834212], '(00)3', 

867[302554791, 302554794], '(00)3', 

868[303497445, 303497448], '3(00)', 

869[304165344, 304165347], '3(00)', 

870[304790218, 304790222], '3(010)', 

871[305302352, 305302355], '(00)3', 

872[306785996, 306785999], '3(00)', 

873[307051443, 307051446], '3(00)', 

874[307481539, 307481542], '3(00)', 

875[308605569, 308605572], '3(00)', 

876[309237610, 309237613], '3(00)', 

877[310509287, 310509290], '(00)3', 

878[310554057, 310554060], '3(00)', 

879[310646345, 310646348], '3(00)', 

880[311274896, 311274899], '(00)3', 

881[311894272, 311894275], '3(00)', 

882[312269470, 312269473], '(00)3', 

883[312306601, 312306605], '(00)40', 

884[312683193, 312683196], '3(00)', 

885[314499804, 314499807], '3(00)', 

886[314636802, 314636805], '(00)3', 

887[314689897, 314689900], '3(00)', 

888[314721319, 314721322], '3(00)', 

889[316132890, 316132893], '3(00)', 

890[316217470, 316217474], '(010)3', 

891[316465705, 316465708], '3(00)', 

892[316542790, 316542793], '(00)3', 

893[320822347, 320822350], '3(00)', 

894[321733242, 321733245], '3(00)', 

895[324413970, 324413973], '(00)3', 

896[325950140, 325950143], '(00)3', 

897[326675884, 326675887], '(00)3', 

898[326704208, 326704211], '3(00)', 

899[327596247, 327596250], '3(00)', 

900[328123172, 328123175], '3(00)', 

901[328182212, 328182215], '(00)3', 

902[328257498, 328257501], '3(00)', 

903[328315836, 328315839], '(00)3', 

904[328800974, 328800977], '(00)3', 

905[328998509, 328998512], '3(00)', 

906[329725370, 329725373], '(00)3', 

907[332080601, 332080604], '(00)3', 

908[332221246, 332221249], '(00)3', 

909[332299899, 332299902], '(00)3', 

910[332532822, 332532825], '(00)3', 

911[333334544, 333334548], '(00)22', 

912[333881266, 333881269], '3(00)', 

913[334703267, 334703270], '3(00)', 

914[334875138, 334875141], '3(00)', 

915[336531451, 336531454], '3(00)', 

916[336825907, 336825910], '(00)3', 

917[336993167, 336993170], '(00)3', 

918[337493998, 337494001], '3(00)', 

919[337861034, 337861037], '3(00)', 

920[337899191, 337899194], '(00)3', 

921[337958123, 337958126], '(00)3', 

922[342331982, 342331985], '3(00)', 

923[342676068, 342676071], '3(00)', 

924[347063781, 347063784], '3(00)', 

925[347697348, 347697351], '3(00)', 

926[347954319, 347954322], '3(00)', 

927[348162775, 348162778], '3(00)', 

928[349210702, 349210705], '(00)3', 

929[349212913, 349212916], '3(00)', 

930[349248650, 349248653], '(00)3', 

931[349913500, 349913503], '3(00)', 

932[350891529, 350891532], '3(00)', 

933[351089323, 351089326], '3(00)', 

934[351826158, 351826161], '3(00)', 

935[352228580, 352228583], '(00)3', 

936[352376244, 352376247], '3(00)', 

937[352853758, 352853761], '(00)3', 

938[355110439, 355110442], '(00)3', 

939[355808090, 355808094], '(00)40', 

940[355941556, 355941559], '3(00)', 

941[356360231, 356360234], '(00)3', 

942[356586657, 356586660], '3(00)', 

943[356892926, 356892929], '(00)3', 

944[356908232, 356908235], '3(00)', 

945[357912730, 357912733], '3(00)', 

946[358120344, 358120347], '3(00)', 

947[359044096, 359044099], '(00)3', 

948[360819357, 360819360], '3(00)', 

949[361399662, 361399666], '(010)3', 

950[362361315, 362361318], '(00)3', 

951[363610112, 363610115], '(00)3', 

952[363964804, 363964807], '3(00)', 

953[364527375, 364527378], '(00)3', 

954[365090327, 365090330], '(00)3', 

955[365414539, 365414542], '3(00)', 

956[366738474, 366738477], '3(00)', 

957[368714778, 368714783], '04(010)', 

958[368831545, 368831548], '(00)3', 

959[368902387, 368902390], '(00)3', 

960[370109769, 370109772], '3(00)', 

961[370963333, 370963336], '3(00)', 

962[372541136, 372541140], '3(010)', 

963[372681562, 372681565], '(00)3', 

964[373009410, 373009413], '(00)3', 

965[373458970, 373458973], '3(00)', 

966[375648658, 375648661], '3(00)', 

967[376834728, 376834731], '3(00)', 

968[377119945, 377119948], '(00)3', 

969[377335703, 377335706], '(00)3', 

970[378091745, 378091748], '3(00)', 

971[379139522, 379139525], '3(00)', 

972[380279160, 380279163], '(00)3', 

973[380619442, 380619445], '3(00)', 

974[381244231, 381244234], '3(00)', 

975[382327446, 382327450], '(010)3', 

976[382357073, 382357076], '3(00)', 

977[383545479, 383545482], '3(00)', 

978[384363766, 384363769], '(00)3', 

979[384401786, 384401790], '22(00)', 

980[385198212, 385198215], '3(00)', 

981[385824476, 385824479], '(00)3', 

982[385908194, 385908197], '3(00)', 

983[386946806, 386946809], '3(00)', 

984[387592175, 387592179], '22(00)', 

985[388329293, 388329296], '(00)3', 

986[388679566, 388679569], '3(00)', 

987[388832142, 388832145], '3(00)', 

988[390087103, 390087106], '(00)3', 

989[390190926, 390190930], '(00)22', 

990[390331207, 390331210], '3(00)', 

991[391674495, 391674498], '3(00)', 

992[391937831, 391937834], '3(00)', 

993[391951632, 391951636], '(00)22', 

994[392963986, 392963989], '(00)3', 

995[393007921, 393007924], '3(00)', 

996[393373210, 393373213], '3(00)', 

997[393759572, 393759575], '(00)3', 

998[394036662, 394036665], '(00)3', 

999[395813866, 395813869], '(00)3', 

1000[395956690, 395956693], '3(00)', 

1001[396031670, 396031673], '3(00)', 

1002[397076433, 397076436], '3(00)', 

1003[397470601, 397470604], '3(00)', 

1004[398289458, 398289461], '3(00)', 

1005# 

1006[368714778, 368714783], '04(010)', 

1007[437953499, 437953504], '04(010)', 

1008[526196233, 526196238], '032(00)', 

1009[744719566, 744719571], '(010)40', 

1010[750375857, 750375862], '032(00)', 

1011[958241932, 958241937], '04(010)', 

1012[983377342, 983377347], '(00)410', 

1013[1003780080, 1003780085], '04(010)', 

1014[1070232754, 1070232759], '(00)230', 

1015[1209834865, 1209834870], '032(00)', 

1016[1257209100, 1257209105], '(00)410', 

1017[1368002233, 1368002238], '(00)230' 

1018]