r - R中的素数函数

标签 r primes

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

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可以被一个数整除 b如果除法的结果a / b等于整数除法的结果a %/% b .任何整数 pn可以被至少两个数整除:1pn .质数是那些只能被这两者整除的数。破解代码:

  • pn / 1:pn是除以 1 的结果, 2 , ..., pn
  • pn %/% 1:pn是整数除以 1 的结果, 2 , ..., pn
  • 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 关于不检查所有数字的评论。)

    关于r - R中的素数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767408/

    相关文章:

    删除具有 NA 值的行并在另一年删除这些观察值

    java - Java 中素数算法的时间复杂度

    math - 找到可以给你最大总和的数字子集

    r - 在单图混合模型中绘制多个随机效应

    r - 如何随机命名数据框的列或行?

    primes - 计算素数时堆栈空间溢出

    python - 如何优化和寻找大量输入的输出?

    r - 向量中特定序列的数量

    r - 将字符向量转换为不带引号的对象名称