nthprime

版本1.0.0.0 (256 KB) 约翰D 'Errico
找出第n个质数,或者计算小于某个给定值的质数的个数。

1.1 k下载

更新2010年3月24日

查看许可协议

我完全没有理由写这段代码,只是觉得写起来很有趣。在空闲的时候,我想知道如何有效地从质数序列中计算出第n个质数,给定索引n。

是的,可以使用质数函数,它对于足够小的质数集来说是相当快的。但是质数本身并不能解决这个问题。质数返回小于或等于某个值的质数的整个列表。所以你可能会调用质数,却发现你生成的质数太少,无法得到你想要的特定质数。更糟的是,假设你想找到P(1e8)?生成包含100,000,000个质数的整个列表的效率非常低,只需要该列表的最后一个元素。

一个密切相关的问题是问有多少质数小于一个给定的值。我们可以通过numel(primes(K))来得到这个值,但是如果数字K非常大,可能大到2^32,那么对质数的调用将花费很长时间来执行。

n '函数有效地解决了这两个问题。例如,P(12345678)是什么?

nthprime (123456)
ans =
1632899

它是质数。

isprime (1632899)
ans =
1

此外,我们还可以验证它是完整素数序列中的第123456′个素数。

元素个数(质数(1632899))
ans =
123456

找出编号为[1 10 100 1000 10000 100000 1000000 10000000 100000000]的质数

P = nthprime(10.^(0:8))
p =
2 29 541 7919 104729 1299709 15485863 179424673 2038074743

nth'是相当有效的。例如,小于2^27的质数有7603553个,但是计算这些质数的整个列表可能是一个很大的任务。如果出于某种原因,您只想知道列表上的最后一个质数,那么调用nthprime的代价远远小于计算整个列表的时间。

Tic,p =质数(2^27)
运行时间为4.517565秒。

Tic,plast = nthprime(7603553)
运行时间为0.003868秒。

最后,nthprime可以处理高达2^32的质数,而质数函数远远低于这个数字就会失效。2^32以下大概有2e8个质数。确切地说,我们可以用nthprime来告诉我们有多少个:

nthprime (2 ^ 32, 1)
ans =
203280221

因此,第二个参数允许我们指定nthprime的操作。调用nthprime(K,1)与numel(primes(K))相同。但当K值较大时,它的效率要高得多。

同样,我对这段代码没有任何目标,除了想知道如何解决问题本身,我没有理由编写它。代码使用一个相对较小的质数数据库来定位问题,然后在此基础上应用一个简单的质数筛选。

引用作为

约翰·迪里科(2022)。nthprime(//www.tianjin-qmedu.com/matlabcentral/fileexchange/27073-nthprime), MATLAB中央文件交换。检索

MATLAB版本兼容性
使用R2010a创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux
标签添加标签
确认

启发:nextprime

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

SequenceOfPrimes /