返回素数的函数 [英] Function to return prime numbers

查看:55
本文介绍了返回素数的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆