R 返回素数的函数
我想在R中写一个函数,它接受整数列表,只返回素数值 到目前为止,我有:R 返回素数的函数,r,primes,R,Primes,我想在R中写一个函数,它接受整数列表,只返回素数值 到目前为止,我有: primefindlist<-function(n){ return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)]) } seq.default2中的错误,ceilingsqrtn,by=1: “to”的长度必须为1 有人知道如何克服这个问题吗 下面的代码还告诉我一个整数是素数还是非素数,即is.prime7输出TRUE is.prime <-
primefindlist<-function(n){
return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)])
}
seq.default2中的错误,ceilingsqrtn,by=1:
“to”的长度必须为1
有人知道如何克服这个问题吗
下面的代码还告诉我一个整数是素数还是非素数,即is.prime7输出TRUE
is.prime <- function(n) n == 2L || all(n %% 2L:ceiling(sqrt(n)) != 0)
该函数没有矢量化。试一试
primefindlist<-function(x){
return(x[x==2 | sapply(x, function(n)all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0))])
}
或
该函数没有矢量化。试一试
primefindlist<-function(x){
return(x[x==2 | sapply(x, function(n)all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0))])
}
或
使用gmp库中的iPrime如何
以下是一些测试:
set.seed(33)
randSamp <- sample(10^6,10^5)
system.time(t1 <- myPrimes(randSamp))
user system elapsed
0.07 0.00 0.08
system.time(t2 <- primefindlist(randSamp))
user system elapsed
7.04 0.00 7.06
all(t1==t2)
[1] TRUE
如果您感兴趣,isprime函数将实现。如果您决定不使用任何外部库,那么自己编写这个算法是相当容易的。是一个很好的开始,目前还没有R实现。使用gmp库中的iPrime怎么样
以下是一些测试:
set.seed(33)
randSamp <- sample(10^6,10^5)
system.time(t1 <- myPrimes(randSamp))
user system elapsed
0.07 0.00 0.08
system.time(t2 <- primefindlist(randSamp))
user system elapsed
7.04 0.00 7.06
all(t1==t2)
[1] TRUE
如果您感兴趣,isprime函数将实现。如果您决定不使用任何外部库,那么自己编写这个算法是相当容易的。是一个很好的起点,目前还没有R实现。您正在向seq的to参数提供多个参数,而seq的to参数只能处理1。也许可以尝试迭代或应用函数?lukeA的答案很好。当seq的to参数只能处理1时,您将多个参数输入seq的to参数。也许可以尝试迭代或应用函数?lukeA的答案很好。嘿,Luke,在上面的第一个答案中,你知道有没有一种方法可以不写函数alln%%seq2,ceilingsqrtn,by=1=0,而不是调用该函数的名称并在sapply部分使用该名称?当然。primefindlistHey Luke,你在上面的第一个答案中知道,如果有一种方法不写函数Nalln%%seq2,ceilingsqrtn,by=1=0,而不是调用该函数的名称并在sapply部分使用该名称?当然。primefindlist
set.seed(33)
randSamp <- sample(10^6,10^5)
system.time(t1 <- myPrimes(randSamp))
user system elapsed
0.07 0.00 0.08
system.time(t2 <- primefindlist(randSamp))
user system elapsed
7.04 0.00 7.06
all(t1==t2)
[1] TRUE