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
« 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).
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.
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.
14For n > 400 000 000 we apply the method of Turing, as complemented by
15Lehman, Brent and Trudgian to find a suitable B.
16"""
18from .functions import defun, defun_wrapped
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)
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
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)
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))
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)
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
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
200ITERATION_LIMIT = 4
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)
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
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
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`).
348 **Examples**
350 The first few zeros::
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)
361 Verifying that the values are zeros::
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)
372 Negative indices give the conjugate zeros (`n = 0` is undefined)::
374 >>> zetazero(-1)
375 (0.5 - 14.13472514173469379045725j)
377 :func:`~mpmath.zetazero` supports arbitrarily large `n` and arbitrary precision::
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
388 with *info=True*, :func:`~mpmath.zetazero` gives additional information::
390 >>> mp.dps = 15
391 >>> zetazero(542964976,info=True)
392 ((0.5 + 209039046.578535j), [542964969, 542964978], 6, '(013111110)')
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
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)
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
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
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)`.
479 **Examples**
481 The first zero has imaginary part between 14 and 15::
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)
492 Some closely spaced zeros::
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)
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
545@defun_wrapped
546def backlunds(ctx, t):
547 r"""
548 Computes the function
549 `S(t) = \operatorname{arg} \zeta(\frac{1}{2} + it) / \pi`.
551 See Titchmarsh Section 9.3 for details of the definition.
553 **Examples**
555 >>> from mpmath import *
556 >>> mp.dps = 15; mp.pretty = True
557 >>> backlunds(217.3)
558 0.16302205431184
560 Generally, the value is a small number. At Gram points it is an integer,
561 frequently equal to 0::
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
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`)::
574 >>> t = 1234.55
575 >>> nzeros(t)
576 842
577 >>> siegeltheta(t)/pi+1+backlunds(t)
578 842.0
580 """
581 return ctx.nzeros(t)-1-ctx.siegeltheta(t)/ctx.pi
584"""
585_ROSSER_EXCEPTIONS is a list of all exceptions to
586Rosser's rule for n <= 400 000 000.
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.
599We have included also some Rosser's exceptions beyond n=400 000 000
600that are noted in the literature by some reason.
602The list is composed from the data published in the references:
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.
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.
614J. van de Lune,
615'Sums of Equal Powers of Positive Integers',
616Dissertation,
617Vrije Universiteit te Amsterdam, Centrum voor Wiskunde en Informatica,
618Amsterdam, 1984.
620Thanks to the authors all this papers and those others that have
621contributed to make this possible.
622"""
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]