图片缩略图

nthprime

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

1 k下载

更新2010年3月24日

查看许可协议

我完全没有理由写这段代码,除了写起来很有趣。在一个空闲的时刻,我想知道如何从素数序列有效地计算第n个素数,给定索引n。

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

一个与此密切相关的问题是,有多少质数小于给定值。我们可以用numel(质数(K))来表示,但如果K非常大,可能大到2^32,调用质数将会花费很长时间来执行。

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

nthprime (123456)
ans =
1632899

确保它是质数。

isprime (1632899)
ans =
1

我们还可以证明它是整个质数序列中的第1256个质数。

元素个数(质数(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

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

抽搐,p =质数(2 ^ 27);toc
运行时间为4.517565秒。

抽搐,体= nthprime (7603553); toc
运行时间为0.003868秒。

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

nthprime (2 ^ 32, 1)
ans =
203280221

因此,第二个参数允许我们指定nthprime的操作。调用nthprime(K,1)和numel(素数(K))是一样的。但是对于较大的K值,它更有效。

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

引用作为

约翰D 'Errico(2021)。nthprime(//www.tatmou.com/matlabcentral/fileexchange/27073-nthprime), MATLAB中央文件交换。检索

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

启发:nextprime

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

SequenceOfPrimes /