费马在R中的小定理实现

时间:2015-08-08 10:15:05

标签: r

这是R中费马小定理的一个非常基本的实现。但是,它在n = 59时给出了警告信息。 警告信息: 在ifelse(m!= 0,n %% m,n):模数精度可能完全丧失。有人可以尽力帮我解决这个问题,或者为R提出一个简单的解决方案吗?

P确认=

  function(n){
    two=rep(2,n)
    pv=vector(length=n)
    for (i in 3:n){
      if (
        mod(two[i]^(i-1),i)==1 ### from the numbers package
      )
        pv[i]=TRUE
      else
        pv[i]=FALSE

    }
    pv
  }

1 个答案:

答案 0 :(得分:1)

您可以使用您正在使用的库中的modpower函数numbers来解决大整数问题。

f2 <- function(n) sapply(1:n, function(i) modpower(2, (i-1), i) == 1)
seq(59)[f2(59)]
# [1]  1  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59