zetazeros.py 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  1. """
  2. The function zetazero(n) computes the n-th nontrivial zero of zeta(s).
  3. The general strategy is to locate a block of Gram intervals B where we
  4. know exactly the number of zeros contained and which of those zeros
  5. is that which we search.
  6. If n <= 400 000 000 we know exactly the Rosser exceptions, contained
  7. in a list in this file. Hence for n<=400 000 000 we simply
  8. look at these list of exceptions. If our zero is implicated in one of
  9. these exceptions we have our block B. In other case we simply locate
  10. the good Rosser block containing our zero.
  11. For n > 400 000 000 we apply the method of Turing, as complemented by
  12. Lehman, Brent and Trudgian to find a suitable B.
  13. """
  14. from .functions import defun, defun_wrapped
  15. def find_rosser_block_zero(ctx, n):
  16. """for n<400 000 000 determines a block were one find our zero"""
  17. for k in range(len(_ROSSER_EXCEPTIONS)//2):
  18. a=_ROSSER_EXCEPTIONS[2*k][0]
  19. b=_ROSSER_EXCEPTIONS[2*k][1]
  20. if ((a<= n-2) and (n-1 <= b)):
  21. t0 = ctx.grampoint(a)
  22. t1 = ctx.grampoint(b)
  23. v0 = ctx._fp.siegelz(t0)
  24. v1 = ctx._fp.siegelz(t1)
  25. my_zero_number = n-a-1
  26. zero_number_block = b-a
  27. pattern = _ROSSER_EXCEPTIONS[2*k+1]
  28. return (my_zero_number, [a,b], [t0,t1], [v0,v1])
  29. k = n-2
  30. t,v,b = compute_triple_tvb(ctx, k)
  31. T = [t]
  32. V = [v]
  33. while b < 0:
  34. k -= 1
  35. t,v,b = compute_triple_tvb(ctx, k)
  36. T.insert(0,t)
  37. V.insert(0,v)
  38. my_zero_number = n-k-1
  39. m = n-1
  40. t,v,b = compute_triple_tvb(ctx, m)
  41. T.append(t)
  42. V.append(v)
  43. while b < 0:
  44. m += 1
  45. t,v,b = compute_triple_tvb(ctx, m)
  46. T.append(t)
  47. V.append(v)
  48. return (my_zero_number, [k,m], T, V)
  49. def wpzeros(t):
  50. """Precision needed to compute higher zeros"""
  51. wp = 53
  52. if t > 3*10**8:
  53. wp = 63
  54. if t > 10**11:
  55. wp = 70
  56. if t > 10**14:
  57. wp = 83
  58. return wp
  59. def separate_zeros_in_block(ctx, zero_number_block, T, V, limitloop=None,
  60. fp_tolerance=None):
  61. """Separate the zeros contained in the block T, limitloop
  62. determines how long one must search"""
  63. if limitloop is None:
  64. limitloop = ctx.inf
  65. loopnumber = 0
  66. variations = count_variations(V)
  67. while ((variations < zero_number_block) and (loopnumber <limitloop)):
  68. a = T[0]
  69. v = V[0]
  70. newT = [a]
  71. newV = [v]
  72. variations = 0
  73. for n in range(1,len(T)):
  74. b2 = T[n]
  75. u = V[n]
  76. if (u*v>0):
  77. alpha = ctx.sqrt(u/v)
  78. b= (alpha*a+b2)/(alpha+1)
  79. else:
  80. b = (a+b2)/2
  81. if fp_tolerance < 10:
  82. w = ctx._fp.siegelz(b)
  83. if abs(w)<fp_tolerance:
  84. w = ctx.siegelz(b)
  85. else:
  86. w=ctx.siegelz(b)
  87. if v*w<0:
  88. variations += 1
  89. newT.append(b)
  90. newV.append(w)
  91. u = V[n]
  92. if u*w <0:
  93. variations += 1
  94. newT.append(b2)
  95. newV.append(u)
  96. a = b2
  97. v = u
  98. T = newT
  99. V = newV
  100. loopnumber +=1
  101. if (limitloop>ITERATION_LIMIT)and(loopnumber>2)and(variations+2==zero_number_block):
  102. dtMax=0
  103. dtSec=0
  104. kMax = 0
  105. for k1 in range(1,len(T)):
  106. dt = T[k1]-T[k1-1]
  107. if dt > dtMax:
  108. kMax=k1
  109. dtSec = dtMax
  110. dtMax = dt
  111. elif (dt<dtMax) and(dt >dtSec):
  112. dtSec = dt
  113. if dtMax>3*dtSec:
  114. f = lambda x: ctx.rs_z(x,derivative=1)
  115. t0=T[kMax-1]
  116. t1 = T[kMax]
  117. t=ctx.findroot(f, (t0,t1), solver ='illinois',verify=False, verbose=False)
  118. v = ctx.siegelz(t)
  119. if (t0<t) and (t<t1) and (v*V[kMax]<0):
  120. T.insert(kMax,t)
  121. V.insert(kMax,v)
  122. variations = count_variations(V)
  123. if variations == zero_number_block:
  124. separated = True
  125. else:
  126. separated = False
  127. return (T,V, separated)
  128. def separate_my_zero(ctx, my_zero_number, zero_number_block, T, V, prec):
  129. """If we know which zero of this block is mine,
  130. the function separates the zero"""
  131. variations = 0
  132. v0 = V[0]
  133. for k in range(1,len(V)):
  134. v1 = V[k]
  135. if v0*v1 < 0:
  136. variations +=1
  137. if variations == my_zero_number:
  138. k0 = k
  139. leftv = v0
  140. rightv = v1
  141. v0 = v1
  142. t1 = T[k0]
  143. t0 = T[k0-1]
  144. ctx.prec = prec
  145. wpz = wpzeros(my_zero_number*ctx.log(my_zero_number))
  146. guard = 4*ctx.mag(my_zero_number)
  147. precs = [ctx.prec+4]
  148. index=0
  149. while precs[0] > 2*wpz:
  150. index +=1
  151. precs = [precs[0] // 2 +3+2*index] + precs
  152. ctx.prec = precs[0] + guard
  153. r = ctx.findroot(lambda x:ctx.siegelz(x), (t0,t1), solver ='illinois', verbose=False)
  154. #print "first step at", ctx.dps, "digits"
  155. z=ctx.mpc(0.5,r)
  156. for prec in precs[1:]:
  157. ctx.prec = prec + guard
  158. #print "refining to", ctx.dps, "digits"
  159. znew = z - ctx.zeta(z) / ctx.zeta(z, derivative=1)
  160. #print "difference", ctx.nstr(abs(z-znew))
  161. z=ctx.mpc(0.5,ctx.im(znew))
  162. return ctx.im(z)
  163. def sure_number_block(ctx, n):
  164. """The number of good Rosser blocks needed to apply
  165. Turing method
  166. References:
  167. R. P. Brent, On the Zeros of the Riemann Zeta Function
  168. in the Critical Strip, Math. Comp. 33 (1979) 1361--1372
  169. T. Trudgian, Improvements to Turing Method, Math. Comp."""
  170. if n < 9*10**5:
  171. return(2)
  172. g = ctx.grampoint(n-100)
  173. lg = ctx._fp.ln(g)
  174. brent = 0.0061 * lg**2 +0.08*lg
  175. trudgian = 0.0031 * lg**2 +0.11*lg
  176. N = ctx.ceil(min(brent,trudgian))
  177. N = int(N)
  178. return N
  179. def compute_triple_tvb(ctx, n):
  180. t = ctx.grampoint(n)
  181. v = ctx._fp.siegelz(t)
  182. if ctx.mag(abs(v))<ctx.mag(t)-45:
  183. v = ctx.siegelz(t)
  184. b = v*(-1)**n
  185. return t,v,b
  186. ITERATION_LIMIT = 4
  187. def search_supergood_block(ctx, n, fp_tolerance):
  188. """To use for n>400 000 000"""
  189. sb = sure_number_block(ctx, n)
  190. number_goodblocks = 0
  191. m2 = n-1
  192. t, v, b = compute_triple_tvb(ctx, m2)
  193. Tf = [t]
  194. Vf = [v]
  195. while b < 0:
  196. m2 += 1
  197. t,v,b = compute_triple_tvb(ctx, m2)
  198. Tf.append(t)
  199. Vf.append(v)
  200. goodpoints = [m2]
  201. T = [t]
  202. V = [v]
  203. while number_goodblocks < 2*sb:
  204. m2 += 1
  205. t, v, b = compute_triple_tvb(ctx, m2)
  206. T.append(t)
  207. V.append(v)
  208. while b < 0:
  209. m2 += 1
  210. t,v,b = compute_triple_tvb(ctx, m2)
  211. T.append(t)
  212. V.append(v)
  213. goodpoints.append(m2)
  214. zn = len(T)-1
  215. A, B, separated =\
  216. separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT,
  217. fp_tolerance=fp_tolerance)
  218. Tf.pop()
  219. Tf.extend(A)
  220. Vf.pop()
  221. Vf.extend(B)
  222. if separated:
  223. number_goodblocks += 1
  224. else:
  225. number_goodblocks = 0
  226. T = [t]
  227. V = [v]
  228. # Now the same procedure to the left
  229. number_goodblocks = 0
  230. m2 = n-2
  231. t, v, b = compute_triple_tvb(ctx, m2)
  232. Tf.insert(0,t)
  233. Vf.insert(0,v)
  234. while b < 0:
  235. m2 -= 1
  236. t,v,b = compute_triple_tvb(ctx, m2)
  237. Tf.insert(0,t)
  238. Vf.insert(0,v)
  239. goodpoints.insert(0,m2)
  240. T = [t]
  241. V = [v]
  242. while number_goodblocks < 2*sb:
  243. m2 -= 1
  244. t, v, b = compute_triple_tvb(ctx, m2)
  245. T.insert(0,t)
  246. V.insert(0,v)
  247. while b < 0:
  248. m2 -= 1
  249. t,v,b = compute_triple_tvb(ctx, m2)
  250. T.insert(0,t)
  251. V.insert(0,v)
  252. goodpoints.insert(0,m2)
  253. zn = len(T)-1
  254. A, B, separated =\
  255. separate_zeros_in_block(ctx, zn, T, V, limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance)
  256. A.pop()
  257. Tf = A+Tf
  258. B.pop()
  259. Vf = B+Vf
  260. if separated:
  261. number_goodblocks += 1
  262. else:
  263. number_goodblocks = 0
  264. T = [t]
  265. V = [v]
  266. r = goodpoints[2*sb]
  267. lg = len(goodpoints)
  268. s = goodpoints[lg-2*sb-1]
  269. tr, vr, br = compute_triple_tvb(ctx, r)
  270. ar = Tf.index(tr)
  271. ts, vs, bs = compute_triple_tvb(ctx, s)
  272. as1 = Tf.index(ts)
  273. T = Tf[ar:as1+1]
  274. V = Vf[ar:as1+1]
  275. zn = s-r
  276. A, B, separated =\
  277. separate_zeros_in_block(ctx, zn,T,V,limitloop=ITERATION_LIMIT, fp_tolerance=fp_tolerance)
  278. if separated:
  279. return (n-r-1,[r,s],A,B)
  280. q = goodpoints[sb]
  281. lg = len(goodpoints)
  282. t = goodpoints[lg-sb-1]
  283. tq, vq, bq = compute_triple_tvb(ctx, q)
  284. aq = Tf.index(tq)
  285. tt, vt, bt = compute_triple_tvb(ctx, t)
  286. at = Tf.index(tt)
  287. T = Tf[aq:at+1]
  288. V = Vf[aq:at+1]
  289. return (n-q-1,[q,t],T,V)
  290. def count_variations(V):
  291. count = 0
  292. vold = V[0]
  293. for n in range(1, len(V)):
  294. vnew = V[n]
  295. if vold*vnew < 0:
  296. count +=1
  297. vold = vnew
  298. return count
  299. def pattern_construct(ctx, block, T, V):
  300. pattern = '('
  301. a = block[0]
  302. b = block[1]
  303. t0,v0,b0 = compute_triple_tvb(ctx, a)
  304. k = 0
  305. k0 = 0
  306. for n in range(a+1,b+1):
  307. t1,v1,b1 = compute_triple_tvb(ctx, n)
  308. lgT =len(T)
  309. while (k < lgT) and (T[k] <= t1):
  310. k += 1
  311. L = V[k0:k]
  312. L.append(v1)
  313. L.insert(0,v0)
  314. count = count_variations(L)
  315. pattern = pattern + ("%s" % count)
  316. if b1 > 0:
  317. pattern = pattern + ')('
  318. k0 = k
  319. t0,v0,b0 = t1,v1,b1
  320. pattern = pattern[:-1]
  321. return pattern
  322. @defun
  323. def zetazero(ctx, n, info=False, round=True):
  324. r"""
  325. Computes the `n`-th nontrivial zero of `\zeta(s)` on the critical line,
  326. i.e. returns an approximation of the `n`-th largest complex number
  327. `s = \frac{1}{2} + ti` for which `\zeta(s) = 0`. Equivalently, the
  328. imaginary part `t` is a zero of the Z-function (:func:`~mpmath.siegelz`).
  329. **Examples**
  330. The first few zeros::
  331. >>> from mpmath import *
  332. >>> mp.dps = 25; mp.pretty = True
  333. >>> zetazero(1)
  334. (0.5 + 14.13472514173469379045725j)
  335. >>> zetazero(2)
  336. (0.5 + 21.02203963877155499262848j)
  337. >>> zetazero(20)
  338. (0.5 + 77.14484006887480537268266j)
  339. Verifying that the values are zeros::
  340. >>> for n in range(1,5):
  341. ... s = zetazero(n)
  342. ... chop(zeta(s)), chop(siegelz(s.imag))
  343. ...
  344. (0.0, 0.0)
  345. (0.0, 0.0)
  346. (0.0, 0.0)
  347. (0.0, 0.0)
  348. Negative indices give the conjugate zeros (`n = 0` is undefined)::
  349. >>> zetazero(-1)
  350. (0.5 - 14.13472514173469379045725j)
  351. :func:`~mpmath.zetazero` supports arbitrarily large `n` and arbitrary precision::
  352. >>> mp.dps = 15
  353. >>> zetazero(1234567)
  354. (0.5 + 727690.906948208j)
  355. >>> mp.dps = 50
  356. >>> zetazero(1234567)
  357. (0.5 + 727690.9069482075392389420041147142092708393819935j)
  358. >>> chop(zeta(_)/_)
  359. 0.0
  360. with *info=True*, :func:`~mpmath.zetazero` gives additional information::
  361. >>> mp.dps = 15
  362. >>> zetazero(542964976,info=True)
  363. ((0.5 + 209039046.578535j), [542964969, 542964978], 6, '(013111110)')
  364. This means that the zero is between Gram points 542964969 and 542964978;
  365. it is the 6-th zero between them. Finally (01311110) is the pattern
  366. of zeros in this interval. The numbers indicate the number of zeros
  367. in each Gram interval (Rosser blocks between parenthesis). In this case
  368. there is only one Rosser block of length nine.
  369. """
  370. n = int(n)
  371. if n < 0:
  372. return ctx.zetazero(-n).conjugate()
  373. if n == 0:
  374. raise ValueError("n must be nonzero")
  375. wpinitial = ctx.prec
  376. try:
  377. wpz, fp_tolerance = comp_fp_tolerance(ctx, n)
  378. ctx.prec = wpz
  379. if n < 400000000:
  380. my_zero_number, block, T, V =\
  381. find_rosser_block_zero(ctx, n)
  382. else:
  383. my_zero_number, block, T, V =\
  384. search_supergood_block(ctx, n, fp_tolerance)
  385. zero_number_block = block[1]-block[0]
  386. T, V, separated = separate_zeros_in_block(ctx, zero_number_block, T, V,
  387. limitloop=ctx.inf, fp_tolerance=fp_tolerance)
  388. if info:
  389. pattern = pattern_construct(ctx,block,T,V)
  390. prec = max(wpinitial, wpz)
  391. t = separate_my_zero(ctx, my_zero_number, zero_number_block,T,V,prec)
  392. v = ctx.mpc(0.5,t)
  393. finally:
  394. ctx.prec = wpinitial
  395. if round:
  396. v =+v
  397. if info:
  398. return (v,block,my_zero_number,pattern)
  399. else:
  400. return v
  401. def gram_index(ctx, t):
  402. if t > 10**13:
  403. wp = 3*ctx.log(t, 10)
  404. else:
  405. wp = 0
  406. prec = ctx.prec
  407. try:
  408. ctx.prec += wp
  409. h = int(ctx.siegeltheta(t)/ctx.pi)
  410. finally:
  411. ctx.prec = prec
  412. return(h)
  413. def count_to(ctx, t, T, V):
  414. count = 0
  415. vold = V[0]
  416. told = T[0]
  417. tnew = T[1]
  418. k = 1
  419. while tnew < t:
  420. vnew = V[k]
  421. if vold*vnew < 0:
  422. count += 1
  423. vold = vnew
  424. k += 1
  425. tnew = T[k]
  426. a = ctx.siegelz(t)
  427. if a*vold < 0:
  428. count += 1
  429. return count
  430. def comp_fp_tolerance(ctx, n):
  431. wpz = wpzeros(n*ctx.log(n))
  432. if n < 15*10**8:
  433. fp_tolerance = 0.0005
  434. elif n <= 10**14:
  435. fp_tolerance = 0.1
  436. else:
  437. fp_tolerance = 100
  438. return wpz, fp_tolerance
  439. @defun
  440. def nzeros(ctx, t):
  441. r"""
  442. Computes the number of zeros of the Riemann zeta function in
  443. `(0,1) \times (0,t]`, usually denoted by `N(t)`.
  444. **Examples**
  445. The first zero has imaginary part between 14 and 15::
  446. >>> from mpmath import *
  447. >>> mp.dps = 15; mp.pretty = True
  448. >>> nzeros(14)
  449. 0
  450. >>> nzeros(15)
  451. 1
  452. >>> zetazero(1)
  453. (0.5 + 14.1347251417347j)
  454. Some closely spaced zeros::
  455. >>> nzeros(10**7)
  456. 21136125
  457. >>> zetazero(21136125)
  458. (0.5 + 9999999.32718175j)
  459. >>> zetazero(21136126)
  460. (0.5 + 10000000.2400236j)
  461. >>> nzeros(545439823.215)
  462. 1500000001
  463. >>> zetazero(1500000001)
  464. (0.5 + 545439823.201985j)
  465. >>> zetazero(1500000002)
  466. (0.5 + 545439823.325697j)
  467. This confirms the data given by J. van de Lune,
  468. H. J. J. te Riele and D. T. Winter in 1986.
  469. """
  470. if t < 14.1347251417347:
  471. return 0
  472. x = gram_index(ctx, t)
  473. k = int(ctx.floor(x))
  474. wpinitial = ctx.prec
  475. wpz, fp_tolerance = comp_fp_tolerance(ctx, k)
  476. ctx.prec = wpz
  477. a = ctx.siegelz(t)
  478. if k == -1 and a < 0:
  479. return 0
  480. elif k == -1 and a > 0:
  481. return 1
  482. if k+2 < 400000000:
  483. Rblock = find_rosser_block_zero(ctx, k+2)
  484. else:
  485. Rblock = search_supergood_block(ctx, k+2, fp_tolerance)
  486. n1, n2 = Rblock[1]
  487. if n2-n1 == 1:
  488. b = Rblock[3][0]
  489. if a*b > 0:
  490. ctx.prec = wpinitial
  491. return k+1
  492. else:
  493. ctx.prec = wpinitial
  494. return k+2
  495. my_zero_number,block, T, V = Rblock
  496. zero_number_block = n2-n1
  497. T, V, separated = separate_zeros_in_block(ctx,\
  498. zero_number_block, T, V,\
  499. limitloop=ctx.inf,\
  500. fp_tolerance=fp_tolerance)
  501. n = count_to(ctx, t, T, V)
  502. ctx.prec = wpinitial
  503. return n+n1+1
  504. @defun_wrapped
  505. def backlunds(ctx, t):
  506. r"""
  507. Computes the function
  508. `S(t) = \operatorname{arg} \zeta(\frac{1}{2} + it) / \pi`.
  509. See Titchmarsh Section 9.3 for details of the definition.
  510. **Examples**
  511. >>> from mpmath import *
  512. >>> mp.dps = 15; mp.pretty = True
  513. >>> backlunds(217.3)
  514. 0.16302205431184
  515. Generally, the value is a small number. At Gram points it is an integer,
  516. frequently equal to 0::
  517. >>> chop(backlunds(grampoint(200)))
  518. 0.0
  519. >>> backlunds(extraprec(10)(grampoint)(211))
  520. 1.0
  521. >>> backlunds(extraprec(10)(grampoint)(232))
  522. -1.0
  523. The number of zeros of the Riemann zeta function up to height `t`
  524. satisfies `N(t) = \theta(t)/\pi + 1 + S(t)` (see :func:nzeros` and
  525. :func:`siegeltheta`)::
  526. >>> t = 1234.55
  527. >>> nzeros(t)
  528. 842
  529. >>> siegeltheta(t)/pi+1+backlunds(t)
  530. 842.0
  531. """
  532. return ctx.nzeros(t)-1-ctx.siegeltheta(t)/ctx.pi
  533. """
  534. _ROSSER_EXCEPTIONS is a list of all exceptions to
  535. Rosser's rule for n <= 400 000 000.
  536. Alternately the entry is of type [n,m], or a string.
  537. The string is the zero pattern of the Block and the relevant
  538. adjacent. For example (010)3 corresponds to a block
  539. composed of three Gram intervals, the first ant third without
  540. a zero and the intermediate with a zero. The next Gram interval
  541. contain three zeros. So that in total we have 4 zeros in 4 Gram
  542. blocks. n and m are the indices of the Gram points of this
  543. interval of four Gram intervals. The Rosser exception is therefore
  544. formed by the three Gram intervals that are signaled between
  545. parenthesis.
  546. We have included also some Rosser's exceptions beyond n=400 000 000
  547. that are noted in the literature by some reason.
  548. The list is composed from the data published in the references:
  549. R. P. Brent, J. van de Lune, H. J. J. te Riele, D. T. Winter,
  550. 'On the Zeros of the Riemann Zeta Function in the Critical Strip. II',
  551. Math. Comp. 39 (1982) 681--688.
  552. See also Corrigenda in Math. Comp. 46 (1986) 771.
  553. J. van de Lune, H. J. J. te Riele,
  554. 'On the Zeros of the Riemann Zeta Function in the Critical Strip. III',
  555. Math. Comp. 41 (1983) 759--767.
  556. See also Corrigenda in Math. Comp. 46 (1986) 771.
  557. J. van de Lune,
  558. 'Sums of Equal Powers of Positive Integers',
  559. Dissertation,
  560. Vrije Universiteit te Amsterdam, Centrum voor Wiskunde en Informatica,
  561. Amsterdam, 1984.
  562. Thanks to the authors all this papers and those others that have
  563. contributed to make this possible.
  564. """
  565. _ROSSER_EXCEPTIONS = \
  566. [[13999525, 13999528], '(00)3',
  567. [30783329, 30783332], '(00)3',
  568. [30930926, 30930929], '3(00)',
  569. [37592215, 37592218], '(00)3',
  570. [40870156, 40870159], '(00)3',
  571. [43628107, 43628110], '(00)3',
  572. [46082042, 46082045], '(00)3',
  573. [46875667, 46875670], '(00)3',
  574. [49624540, 49624543], '3(00)',
  575. [50799238, 50799241], '(00)3',
  576. [55221453, 55221456], '3(00)',
  577. [56948779, 56948782], '3(00)',
  578. [60515663, 60515666], '(00)3',
  579. [61331766, 61331770], '(00)40',
  580. [69784843, 69784846], '3(00)',
  581. [75052114, 75052117], '(00)3',
  582. [79545240, 79545243], '3(00)',
  583. [79652247, 79652250], '3(00)',
  584. [83088043, 83088046], '(00)3',
  585. [83689522, 83689525], '3(00)',
  586. [85348958, 85348961], '(00)3',
  587. [86513820, 86513823], '(00)3',
  588. [87947596, 87947599], '3(00)',
  589. [88600095, 88600098], '(00)3',
  590. [93681183, 93681186], '(00)3',
  591. [100316551, 100316554], '3(00)',
  592. [100788444, 100788447], '(00)3',
  593. [106236172, 106236175], '(00)3',
  594. [106941327, 106941330], '3(00)',
  595. [107287955, 107287958], '(00)3',
  596. [107532016, 107532019], '3(00)',
  597. [110571044, 110571047], '(00)3',
  598. [111885253, 111885256], '3(00)',
  599. [113239783, 113239786], '(00)3',
  600. [120159903, 120159906], '(00)3',
  601. [121424391, 121424394], '3(00)',
  602. [121692931, 121692934], '3(00)',
  603. [121934170, 121934173], '3(00)',
  604. [122612848, 122612851], '3(00)',
  605. [126116567, 126116570], '(00)3',
  606. [127936513, 127936516], '(00)3',
  607. [128710277, 128710280], '3(00)',
  608. [129398902, 129398905], '3(00)',
  609. [130461096, 130461099], '3(00)',
  610. [131331947, 131331950], '3(00)',
  611. [137334071, 137334074], '3(00)',
  612. [137832603, 137832606], '(00)3',
  613. [138799471, 138799474], '3(00)',
  614. [139027791, 139027794], '(00)3',
  615. [141617806, 141617809], '(00)3',
  616. [144454931, 144454934], '(00)3',
  617. [145402379, 145402382], '3(00)',
  618. [146130245, 146130248], '3(00)',
  619. [147059770, 147059773], '(00)3',
  620. [147896099, 147896102], '3(00)',
  621. [151097113, 151097116], '(00)3',
  622. [152539438, 152539441], '(00)3',
  623. [152863168, 152863171], '3(00)',
  624. [153522726, 153522729], '3(00)',
  625. [155171524, 155171527], '3(00)',
  626. [155366607, 155366610], '(00)3',
  627. [157260686, 157260689], '3(00)',
  628. [157269224, 157269227], '(00)3',
  629. [157755123, 157755126], '(00)3',
  630. [158298484, 158298487], '3(00)',
  631. [160369050, 160369053], '3(00)',
  632. [162962787, 162962790], '(00)3',
  633. [163724709, 163724712], '(00)3',
  634. [164198113, 164198116], '3(00)',
  635. [164689301, 164689305], '(00)40',
  636. [164880228, 164880231], '3(00)',
  637. [166201932, 166201935], '(00)3',
  638. [168573836, 168573839], '(00)3',
  639. [169750763, 169750766], '(00)3',
  640. [170375507, 170375510], '(00)3',
  641. [170704879, 170704882], '3(00)',
  642. [172000992, 172000995], '3(00)',
  643. [173289941, 173289944], '(00)3',
  644. [173737613, 173737616], '3(00)',
  645. [174102513, 174102516], '(00)3',
  646. [174284990, 174284993], '(00)3',
  647. [174500513, 174500516], '(00)3',
  648. [175710609, 175710612], '(00)3',
  649. [176870843, 176870846], '3(00)',
  650. [177332732, 177332735], '3(00)',
  651. [177902861, 177902864], '3(00)',
  652. [179979095, 179979098], '(00)3',
  653. [181233726, 181233729], '3(00)',
  654. [181625435, 181625438], '(00)3',
  655. [182105255, 182105259], '22(00)',
  656. [182223559, 182223562], '3(00)',
  657. [191116404, 191116407], '3(00)',
  658. [191165599, 191165602], '3(00)',
  659. [191297535, 191297539], '(00)22',
  660. [192485616, 192485619], '(00)3',
  661. [193264634, 193264638], '22(00)',
  662. [194696968, 194696971], '(00)3',
  663. [195876805, 195876808], '(00)3',
  664. [195916548, 195916551], '3(00)',
  665. [196395160, 196395163], '3(00)',
  666. [196676303, 196676306], '(00)3',
  667. [197889882, 197889885], '3(00)',
  668. [198014122, 198014125], '(00)3',
  669. [199235289, 199235292], '(00)3',
  670. [201007375, 201007378], '(00)3',
  671. [201030605, 201030608], '3(00)',
  672. [201184290, 201184293], '3(00)',
  673. [201685414, 201685418], '(00)22',
  674. [202762875, 202762878], '3(00)',
  675. [202860957, 202860960], '3(00)',
  676. [203832577, 203832580], '3(00)',
  677. [205880544, 205880547], '(00)3',
  678. [206357111, 206357114], '(00)3',
  679. [207159767, 207159770], '3(00)',
  680. [207167343, 207167346], '3(00)',
  681. [207482539, 207482543], '3(010)',
  682. [207669540, 207669543], '3(00)',
  683. [208053426, 208053429], '(00)3',
  684. [208110027, 208110030], '3(00)',
  685. [209513826, 209513829], '3(00)',
  686. [212623522, 212623525], '(00)3',
  687. [213841715, 213841718], '(00)3',
  688. [214012333, 214012336], '(00)3',
  689. [214073567, 214073570], '(00)3',
  690. [215170600, 215170603], '3(00)',
  691. [215881039, 215881042], '3(00)',
  692. [216274604, 216274607], '3(00)',
  693. [216957120, 216957123], '3(00)',
  694. [217323208, 217323211], '(00)3',
  695. [218799264, 218799267], '(00)3',
  696. [218803557, 218803560], '3(00)',
  697. [219735146, 219735149], '(00)3',
  698. [219830062, 219830065], '3(00)',
  699. [219897904, 219897907], '(00)3',
  700. [221205545, 221205548], '(00)3',
  701. [223601929, 223601932], '(00)3',
  702. [223907076, 223907079], '3(00)',
  703. [223970397, 223970400], '(00)3',
  704. [224874044, 224874048], '22(00)',
  705. [225291157, 225291160], '(00)3',
  706. [227481734, 227481737], '(00)3',
  707. [228006442, 228006445], '3(00)',
  708. [228357900, 228357903], '(00)3',
  709. [228386399, 228386402], '(00)3',
  710. [228907446, 228907449], '(00)3',
  711. [228984552, 228984555], '3(00)',
  712. [229140285, 229140288], '3(00)',
  713. [231810024, 231810027], '(00)3',
  714. [232838062, 232838065], '3(00)',
  715. [234389088, 234389091], '3(00)',
  716. [235588194, 235588197], '(00)3',
  717. [236645695, 236645698], '(00)3',
  718. [236962876, 236962879], '3(00)',
  719. [237516723, 237516727], '04(00)',
  720. [240004911, 240004914], '(00)3',
  721. [240221306, 240221309], '3(00)',
  722. [241389213, 241389217], '(010)3',
  723. [241549003, 241549006], '(00)3',
  724. [241729717, 241729720], '(00)3',
  725. [241743684, 241743687], '3(00)',
  726. [243780200, 243780203], '3(00)',
  727. [243801317, 243801320], '(00)3',
  728. [244122072, 244122075], '(00)3',
  729. [244691224, 244691227], '3(00)',
  730. [244841577, 244841580], '(00)3',
  731. [245813461, 245813464], '(00)3',
  732. [246299475, 246299478], '(00)3',
  733. [246450176, 246450179], '3(00)',
  734. [249069349, 249069352], '(00)3',
  735. [250076378, 250076381], '(00)3',
  736. [252442157, 252442160], '3(00)',
  737. [252904231, 252904234], '3(00)',
  738. [255145220, 255145223], '(00)3',
  739. [255285971, 255285974], '3(00)',
  740. [256713230, 256713233], '(00)3',
  741. [257992082, 257992085], '(00)3',
  742. [258447955, 258447959], '22(00)',
  743. [259298045, 259298048], '3(00)',
  744. [262141503, 262141506], '(00)3',
  745. [263681743, 263681746], '3(00)',
  746. [266527881, 266527885], '(010)3',
  747. [266617122, 266617125], '(00)3',
  748. [266628044, 266628047], '3(00)',
  749. [267305763, 267305766], '(00)3',
  750. [267388404, 267388407], '3(00)',
  751. [267441672, 267441675], '3(00)',
  752. [267464886, 267464889], '(00)3',
  753. [267554907, 267554910], '3(00)',
  754. [269787480, 269787483], '(00)3',
  755. [270881434, 270881437], '(00)3',
  756. [270997583, 270997586], '3(00)',
  757. [272096378, 272096381], '3(00)',
  758. [272583009, 272583012], '(00)3',
  759. [274190881, 274190884], '3(00)',
  760. [274268747, 274268750], '(00)3',
  761. [275297429, 275297432], '3(00)',
  762. [275545476, 275545479], '3(00)',
  763. [275898479, 275898482], '3(00)',
  764. [275953000, 275953003], '(00)3',
  765. [277117197, 277117201], '(00)22',
  766. [277447310, 277447313], '3(00)',
  767. [279059657, 279059660], '3(00)',
  768. [279259144, 279259147], '3(00)',
  769. [279513636, 279513639], '3(00)',
  770. [279849069, 279849072], '3(00)',
  771. [280291419, 280291422], '(00)3',
  772. [281449425, 281449428], '3(00)',
  773. [281507953, 281507956], '3(00)',
  774. [281825600, 281825603], '(00)3',
  775. [282547093, 282547096], '3(00)',
  776. [283120963, 283120966], '3(00)',
  777. [283323493, 283323496], '(00)3',
  778. [284764535, 284764538], '3(00)',
  779. [286172639, 286172642], '3(00)',
  780. [286688824, 286688827], '(00)3',
  781. [287222172, 287222175], '3(00)',
  782. [287235534, 287235537], '3(00)',
  783. [287304861, 287304864], '3(00)',
  784. [287433571, 287433574], '(00)3',
  785. [287823551, 287823554], '(00)3',
  786. [287872422, 287872425], '3(00)',
  787. [288766615, 288766618], '3(00)',
  788. [290122963, 290122966], '3(00)',
  789. [290450849, 290450853], '(00)22',
  790. [291426141, 291426144], '3(00)',
  791. [292810353, 292810356], '3(00)',
  792. [293109861, 293109864], '3(00)',
  793. [293398054, 293398057], '3(00)',
  794. [294134426, 294134429], '3(00)',
  795. [294216438, 294216441], '(00)3',
  796. [295367141, 295367144], '3(00)',
  797. [297834111, 297834114], '3(00)',
  798. [299099969, 299099972], '3(00)',
  799. [300746958, 300746961], '3(00)',
  800. [301097423, 301097426], '(00)3',
  801. [301834209, 301834212], '(00)3',
  802. [302554791, 302554794], '(00)3',
  803. [303497445, 303497448], '3(00)',
  804. [304165344, 304165347], '3(00)',
  805. [304790218, 304790222], '3(010)',
  806. [305302352, 305302355], '(00)3',
  807. [306785996, 306785999], '3(00)',
  808. [307051443, 307051446], '3(00)',
  809. [307481539, 307481542], '3(00)',
  810. [308605569, 308605572], '3(00)',
  811. [309237610, 309237613], '3(00)',
  812. [310509287, 310509290], '(00)3',
  813. [310554057, 310554060], '3(00)',
  814. [310646345, 310646348], '3(00)',
  815. [311274896, 311274899], '(00)3',
  816. [311894272, 311894275], '3(00)',
  817. [312269470, 312269473], '(00)3',
  818. [312306601, 312306605], '(00)40',
  819. [312683193, 312683196], '3(00)',
  820. [314499804, 314499807], '3(00)',
  821. [314636802, 314636805], '(00)3',
  822. [314689897, 314689900], '3(00)',
  823. [314721319, 314721322], '3(00)',
  824. [316132890, 316132893], '3(00)',
  825. [316217470, 316217474], '(010)3',
  826. [316465705, 316465708], '3(00)',
  827. [316542790, 316542793], '(00)3',
  828. [320822347, 320822350], '3(00)',
  829. [321733242, 321733245], '3(00)',
  830. [324413970, 324413973], '(00)3',
  831. [325950140, 325950143], '(00)3',
  832. [326675884, 326675887], '(00)3',
  833. [326704208, 326704211], '3(00)',
  834. [327596247, 327596250], '3(00)',
  835. [328123172, 328123175], '3(00)',
  836. [328182212, 328182215], '(00)3',
  837. [328257498, 328257501], '3(00)',
  838. [328315836, 328315839], '(00)3',
  839. [328800974, 328800977], '(00)3',
  840. [328998509, 328998512], '3(00)',
  841. [329725370, 329725373], '(00)3',
  842. [332080601, 332080604], '(00)3',
  843. [332221246, 332221249], '(00)3',
  844. [332299899, 332299902], '(00)3',
  845. [332532822, 332532825], '(00)3',
  846. [333334544, 333334548], '(00)22',
  847. [333881266, 333881269], '3(00)',
  848. [334703267, 334703270], '3(00)',
  849. [334875138, 334875141], '3(00)',
  850. [336531451, 336531454], '3(00)',
  851. [336825907, 336825910], '(00)3',
  852. [336993167, 336993170], '(00)3',
  853. [337493998, 337494001], '3(00)',
  854. [337861034, 337861037], '3(00)',
  855. [337899191, 337899194], '(00)3',
  856. [337958123, 337958126], '(00)3',
  857. [342331982, 342331985], '3(00)',
  858. [342676068, 342676071], '3(00)',
  859. [347063781, 347063784], '3(00)',
  860. [347697348, 347697351], '3(00)',
  861. [347954319, 347954322], '3(00)',
  862. [348162775, 348162778], '3(00)',
  863. [349210702, 349210705], '(00)3',
  864. [349212913, 349212916], '3(00)',
  865. [349248650, 349248653], '(00)3',
  866. [349913500, 349913503], '3(00)',
  867. [350891529, 350891532], '3(00)',
  868. [351089323, 351089326], '3(00)',
  869. [351826158, 351826161], '3(00)',
  870. [352228580, 352228583], '(00)3',
  871. [352376244, 352376247], '3(00)',
  872. [352853758, 352853761], '(00)3',
  873. [355110439, 355110442], '(00)3',
  874. [355808090, 355808094], '(00)40',
  875. [355941556, 355941559], '3(00)',
  876. [356360231, 356360234], '(00)3',
  877. [356586657, 356586660], '3(00)',
  878. [356892926, 356892929], '(00)3',
  879. [356908232, 356908235], '3(00)',
  880. [357912730, 357912733], '3(00)',
  881. [358120344, 358120347], '3(00)',
  882. [359044096, 359044099], '(00)3',
  883. [360819357, 360819360], '3(00)',
  884. [361399662, 361399666], '(010)3',
  885. [362361315, 362361318], '(00)3',
  886. [363610112, 363610115], '(00)3',
  887. [363964804, 363964807], '3(00)',
  888. [364527375, 364527378], '(00)3',
  889. [365090327, 365090330], '(00)3',
  890. [365414539, 365414542], '3(00)',
  891. [366738474, 366738477], '3(00)',
  892. [368714778, 368714783], '04(010)',
  893. [368831545, 368831548], '(00)3',
  894. [368902387, 368902390], '(00)3',
  895. [370109769, 370109772], '3(00)',
  896. [370963333, 370963336], '3(00)',
  897. [372541136, 372541140], '3(010)',
  898. [372681562, 372681565], '(00)3',
  899. [373009410, 373009413], '(00)3',
  900. [373458970, 373458973], '3(00)',
  901. [375648658, 375648661], '3(00)',
  902. [376834728, 376834731], '3(00)',
  903. [377119945, 377119948], '(00)3',
  904. [377335703, 377335706], '(00)3',
  905. [378091745, 378091748], '3(00)',
  906. [379139522, 379139525], '3(00)',
  907. [380279160, 380279163], '(00)3',
  908. [380619442, 380619445], '3(00)',
  909. [381244231, 381244234], '3(00)',
  910. [382327446, 382327450], '(010)3',
  911. [382357073, 382357076], '3(00)',
  912. [383545479, 383545482], '3(00)',
  913. [384363766, 384363769], '(00)3',
  914. [384401786, 384401790], '22(00)',
  915. [385198212, 385198215], '3(00)',
  916. [385824476, 385824479], '(00)3',
  917. [385908194, 385908197], '3(00)',
  918. [386946806, 386946809], '3(00)',
  919. [387592175, 387592179], '22(00)',
  920. [388329293, 388329296], '(00)3',
  921. [388679566, 388679569], '3(00)',
  922. [388832142, 388832145], '3(00)',
  923. [390087103, 390087106], '(00)3',
  924. [390190926, 390190930], '(00)22',
  925. [390331207, 390331210], '3(00)',
  926. [391674495, 391674498], '3(00)',
  927. [391937831, 391937834], '3(00)',
  928. [391951632, 391951636], '(00)22',
  929. [392963986, 392963989], '(00)3',
  930. [393007921, 393007924], '3(00)',
  931. [393373210, 393373213], '3(00)',
  932. [393759572, 393759575], '(00)3',
  933. [394036662, 394036665], '(00)3',
  934. [395813866, 395813869], '(00)3',
  935. [395956690, 395956693], '3(00)',
  936. [396031670, 396031673], '3(00)',
  937. [397076433, 397076436], '3(00)',
  938. [397470601, 397470604], '3(00)',
  939. [398289458, 398289461], '3(00)',
  940. #
  941. [368714778, 368714783], '04(010)',
  942. [437953499, 437953504], '04(010)',
  943. [526196233, 526196238], '032(00)',
  944. [744719566, 744719571], '(010)40',
  945. [750375857, 750375862], '032(00)',
  946. [958241932, 958241937], '04(010)',
  947. [983377342, 983377347], '(00)410',
  948. [1003780080, 1003780085], '04(010)',
  949. [1070232754, 1070232759], '(00)230',
  950. [1209834865, 1209834870], '032(00)',
  951. [1257209100, 1257209105], '(00)410',
  952. [1368002233, 1368002238], '(00)230'
  953. ]