返回素数的函数 [英] Function to return prime numbers
本文介绍了返回素数的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用 R 编写一个函数,它接受一个整数列表并只返回素数.
到目前为止,我有这个:
primefindlist<-function(n){return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)])}
但是我在运行该函数时不断收到错误消息,例如;
primefindlist(c(7,11))
<块引用>
seq.default(2,ceiling(sqrt(n)), by = 1) 中的错误:'to' 的长度必须为 1
有人知道如何克服这个问题吗?
还有下面的代码告诉我一个整数是否是素数,即 is.prime(7) 输出 TRUE
is.prime <- function(n) n == 2L ||全部(n %% 2L:天花板(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(n){return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)])}vPrimefindlist <- Vectorize(primefindlist, vectorize.args = "n")vPrimefindlist(c(7,11))
I want to write a function in R which accepts a list of integers and returns only the values which are prime.
So far I have this:
primefindlist<-function(n){
return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)])
}
But I keep getting an error message when I run the function e.g;
primefindlist(c(7,11))
Error in seq.default(2, ceiling(sqrt(n)), by = 1) : 'to' must be of length 1
Anyone got any ideas how to overcome this?
Also the code below tells me if a single integer is prime or not ie is.prime(7) outputs TRUE
is.prime <- function(n) n == 2L || all(n %% 2L:ceiling(sqrt(n)) != 0)
解决方案
The function is not vectorized. Try
primefindlist<-function(x){
return(x[x==2 | sapply(x, function(n)all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0))])
}
or
primefindlist<-function(n){
return(n[n==2 | all(n %% seq(2,ceiling(sqrt(n)),by=1) !=0)])
}
vPrimefindlist <- Vectorize(primefindlist, vectorize.args = "n")
vPrimefindlist(c(7,11))
这篇关于返回素数的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文