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

我想在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 <- 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