R中的质数函数

dsmoore

我试图创建一个函数来测试给定的整数是否是质数,我尝试使用以下方法:

tpn <- function(prime.num){

    if(prime.num==2){
        print("PRIME")
    } else {

    if(prime.num%%(2:(prime.num-1))!=0){
        print("PRIME")

    } else { 
        print("NOT PRIME")

}}}

尽管我不明白为什么,但这是行不通的。我正在检查给定的数字是否可以除以该整数的任何整数而没有余数。如果不能,则数字为素数。

我发现的另一个解决方案是:

tpn <- function(pn){

    if(sum(pn/1:pn==pn%/%1:pn)==2)
            print("prime")

}

这有效。虽然,我无法理解sum(pn/1:pn == pn%/%1:pn) == 2实际要测试的内容。

如果除法的结果等于整数除法的结果,则数字a可被数字整除任何整数都可以除以至少两个数字:质数是那些只能被这两个数相除的数。分解代码:ba / ba %/% bpn1pn

  1. pn / 1:pn是的划分结果通过12...,pn
  2. pn %/% 1:pn是整数除法的结果通过12...,pn
  3. sum(pn / 1:pn == pn %/% 1:pn)其中有多少相等,即的整数除数的个数pn如果此数字为2,则您有一个质数。

您的代码出了什么问题:if需要测试是否存在某种东西TRUEFALSE但是您正在将其传递给整个矢量。另外,您的逻辑是错误的。应该是:

is.prime <- function(num) {
   if (num == 2) {
      TRUE
   } else if (any(num %% 2:(num-1) == 0)) {
      FALSE
   } else { 
      TRUE
   }
}

一旦确定要返回逻辑,就可以使代码更短:

is.prime <- function(n) n == 2L || all(n %% 2L:max(2,floor(sqrt(n))) != 0)

(其中包含@Carl关于不检查所有数字的评论。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章