我编写了一个函数,sieve(n)它使用了Eratosthenes的Sieve来返回所有素数的数组n.
sieve(25) # ==> [2, 3, 5, 7, 11, 13, 17, 19, 23]
Run Code Online (Sandbox Code Playgroud)
可在此处阅读此功能的来源.
我现在要重构这个,以便sieve(n)返回nth prime.我只是不确定我是怎么做到的.我不想写一个全新的更精细的功能,所以看起来最好的方法是弄清楚筛子应该达到什么价值.
例如,如果我要求第27个素数,那么筛子的初始整数列表应该是2 (我知道第27个素数不大于).但有没有一种简单的方法来确定这个价值是什么?
我研究这个问题,并发现这Quora的帖子里面说,第n个素数必须介于n*Math.log(n) + n*(Math.log(Math.log(n))-1)和n*Math.log(n) + n*Math.log(Math.log(n))(这里Math.log是Ruby的自然对数),而只是在list这两个数字之间的数字阵列使得筛产量怪异的值,比如56为第15个素数(56不是素数,答案应该是47).
你可以猜到,我完全脱离了我的元素.如果有人能给我一些建议,我真的很感激.