2015-08-08 61 views
2

這是R中fermat小定理的一個非常基本的實現,但它在n = 59時給出警告消息。 警告信息: 在ifelse(m!= 0,n %% m,n)中:可能完全損失模量精度。有人可以盡力幫我解決這個問題,或者提出一個簡單的R解決方案嗎?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

來源:https://www.youtube.com/watch?v=w0ZQvZLx2KA – user2007598

+0

對於那些有興趣誰這忽略1和2的時刻。 – user2007598

+0

查看這裏的解決方案,它可能會對你有所幫助http://stackoverflow.com/questions/8580717/modulus-warning-in-r-lehmann-primality-test – erasmortg

回答

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 
+0

@nongkong所做的事情。謝謝你,先生。 – user2007598

+0

@ongkong - 謝謝你,謝謝你,謝謝你是冠軍! – user2007598

+0

@ user2007598 HTH:D – jenesaisquoi