根据黎曼假说,Riemann zeta函数的所有零要么是负偶数整数(称为平凡零),要么是实t值(称为非平凡零)的形式1/2 ± i*t的复数。对于这个挑战,我们将只考虑虚部为正的非平凡零点,并且假设Riemann假设为真。这些非平凡的零可以根据其虚部的大小来排序。前几个大约是0.5 + 14.1347251i, 0.5 + 21.0220396i, 0.5 + 25.0108576i, 0.5 + 30.4248761i, 0.5 + 32.9350616i。
挑战
给定一个整数N,输出黎曼zeta函数的Nth非平凡零的虚部,四舍五入到最近的整数(四舍五入,因此13.5将舍入到14)。
以下测试用例是一个索引的。
1 14
2 21
3 25
4 30
5 33
6 38
7 41
8 43
9 48
10 50
50 143
100 237这是OEIS序列A002410。
发布于 2017-02-20 12:51:23
⌊Im@ZetaZero@#+.5⌋&不幸的是,Round将.5循环到最接近的偶数,因此我们必须通过添加.5和地板来实现舍入。
发布于 2017-02-21 16:15:01
在GP中,对解析数论(主要是代数理论)的支持不多,但足以应付这一挑战。
n->lfunzeros(1,15*n)[n]\/1发布于 2017-03-07 18:32:50
lambda n:round(lcalc.zeros(n)[-1])在网上试试
此解决方案是在OEIS页面上找到的程序的黄金形式。
lcalc.zeros是一个函数(值得庆幸的是,它用更短的方式拼写,而不是对一个额外字节的zeroes ),它返回第一个n非平凡Riemann零的虚部。接受-1st索引将返回nth 0(1-索引),round将其舍入到最近的整数。在Python3中,round使用银行家的四舍五入(半到最近-偶数),但谢天谢地,Sage运行在Python2上,其中round使用一半舍入。
https://codegolf.stackexchange.com/questions/110626
复制相似问题