【问题标题】:How would I go about testing the primality of a large integer in R?我将如何测试 R 中大整数的素数?
【发布时间】:2017-09-08 19:34:09
【问题描述】:

我有一个 2500 位整数,我需要确定它的素数。 R中有许多方法可以测试“小”数的素数,但该语言似乎不适合存储大量数字。有一些包旨在存储这些数字,但它们似乎都围绕着将它保存在一个字符串中,这让我不确定如何对其进行素数测试。任何有关该主题的语言功能的澄清将不胜感激。

【问题讨论】:

  • 你有什么特别的原因会被 R 吸引来完成这项任务吗?我个人喜欢 R,但它不是我的首选。
  • 仅仅因为我了解 R 的基础知识,我正在努力加深对它的理解。如果有更好的语言或工具我可以使用,那也很好。
  • “他们似乎都围绕着将它保存在一个字符串中”事实并非如此。您通常只需要输入数字作为字符串。
  • 好吧,这一定是我误解的地方。所以我仍然可以像处理普通整数一样操作?

标签: r primality-test


【解决方案1】:

查找 Lucas-Lehmer 检验以检查大数的素数...它已作为 mersenne 函数在数字库中,您可以使用 getAnywhere 函数查看它。

library(numbers); getAnywhere(mersenne)

如果你真的打算在这么大的数字上运行它,我建议 Haskell 或 Cython 从中挤出一些额外的速度 - 你会希望它在 C/C++ 而不是 R 中运行,希望这能让你读到一些有趣的东西虽然是 R 代码。

https://cran.r-project.org/web/packages/numbers/numbers.pdf

【讨论】:

  • 他的号码不一定是梅森,所以这并没有真正的帮助。
  • 该算法可以应用于任何数字——不过它需要一些递归,这是 Haskell 比 R 更适合的另一个原因。mathworld.wolfram.com/PrattCertificate.html
  • Lucas 和 Lucas-Lehmer 测试似乎有些混淆,它们是不同的东西。卢卡斯是个大忙人,他也有卢卡斯数、卢卡斯序列和以他命名的卢卡斯可能素数检验。 Lucas-Lehmer 检验适用于梅森数。您正在考虑的卢卡斯测试是使用 n-1 进行证明。请参阅 1975 年的 Brillhart-Lehmer-Selfridge 论文,了解包括许多重要扩展在内的全部详细信息。 2500 位数字并不大,但我们会使用这种大小的 APR-CL 或 ECPP,除非该数字特别适合 n +/- 1。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多