这是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
}
答案 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