图像缩略图

nthprime.

版本1.0.0.0(256 KB) John d'Errico.
查找N'th Prime,或计算小于某个给定值的素数数。
5.0
1评级

2下载

更新2010年3月24日

查看许可证

除了写作之外,我绝对没有理由写入这段代码。在闲散的时刻,我想知道,在给出索引n的情况下,如何从主要序列中有效地计算N'th素数。

是的,可以使用Primes功能,这对于小的足够纤维素套装来说是合理的。但自身的素质并没有解决这个问题。Primes返回小于或等于某个值的Primes列表。因此,您可能会调用Primes,只能为您生成太少的素数来获取您想要的特定素数。更糟糕,假设你想找到p(1e8)?生成100,000,000个素数的整个列表是非常低效的,只需要该列表的最后一个元素。

密切相关的问题是询问多少次素数低于给定值。我们可以通过NUMEL获得这一点(PRIMES(k)),但如果数字k非常大,可能是大约2 ^ 32,对媒体的呼叫将需要太长时间才能执行。

nthprime函数有效解决了这些问题。例如,什么是p(12345678)?

nthprime(123456)
ans =.
1632899.

看到它是素数。

Isprime(1632899)
ans =.
1

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

numel(Primes(1632899))
ans =.
123456.

找到素数编号[1 10 100 1000 10000 100000百万千万亿]

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

nthprime是相当高的。例如,有7603553的素数小于2 ^ 27,但计算这些素线的整个列表可能是一个大的任务。如果由于某种原因,您只想知道该列表的最后一个素数,调用nthprime的成本远远不到计算整个列表的时间。

tic,p = primes(2 ^ 27); toc
经过时间为4.517565秒。

Tic,Plast = nthprime(7603553); TOC
经过时间为0.003868秒。

最后,Nthprime可以使用高达2 ^ 32的素线,而Primes函数远远低于该数字的蒸汽。大约有2E8的素数低于2 ^ 32。确切地说,我们可以使用nthprime告诉我们有多少:

nthprime(2 ^ 32,1)
ans =.
203280221.

因此,第二个参数允许我们指定nthprime的操作。调用nthprime(k,1)与numel相同(Primes(k))。但对于k的大值而言,它更有效。

再次,我绝对没有这个代码的目标,没有理由写入它,除了解决我如何解决问题本身。代码是使用相对较小的primes数据库编写的,以本地化问题,然后它应用了一个简单的Prime筛子。

引用

John d'Errico(2021年)。nthprime.(//www.tianjin-qmedu.com/matlabcentral/fileexchange/27073-nthprime),matlab中央文件交换。检索到

评论和评级(1

陈力

好的

Matlab释放兼容性
用R2010A创建
兼容任何释放
平台兼容性
视窗 苹果系统 Linux.
标签添加标签
致谢

灵感来自:下一个

社区宝藏狩猎

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

开始狩猎!

sequencofprimes /