函数来查找R上的素整数

函数来查找R上的素整数,r,R,为什么我的R代码不能工作(即找不到素数) x这里有一些问题 根据@r2evans注释,if条件需要采用长度为1的输入参数。您可以使用all命令绕过此问题 您的if条件在逻辑上是错误的。如果mod运算符等于0,则它不是素数。如果你真的想做0 2被认为是质数。您的逻辑对2无效,因为2%2=0。因此,您需要以不同的方式处理该情况。或者该功能需要在3点开始工作 以下是一个工作版本: prime <- function(x){ if(x == 2){ print("p"

为什么我的R代码不能工作(即找不到素数)


x这里有一些问题

  • 根据@r2evans注释,if条件需要采用长度为1的输入参数。您可以使用
    all
    命令绕过此问题
  • 您的if条件在逻辑上是错误的。如果mod运算符等于0,则它不是素数。如果你真的想做0
  • 2被认为是质数。您的逻辑对2无效,因为2%2=0。因此,您需要以不同的方式处理该情况。或者该功能需要在3点开始工作
  • 以下是一个工作版本:

    prime <- function(x){
      if(x == 2){
        print("p")
      }
      else if(all(x %% (2:(x-1)) != 0)) {
      print("p")
    } else {
        print("np")
      }
    }
    
    
    > prime(2)
    [1] "p"
    > prime(3)
    [1] "p"
    > prime(4)
    [1] "np"
    > prime(5)
    [1] "p"
    > prime(6)
    [1] "np"
    > prime(7)
    [1] "p"
    
    素数素数(2)
    [1] “p”
    >素数(3)
    [1] “p”
    >素数(4)
    [1] “np”
    >素数(5)
    [1] “p”
    >素数(6)
    [1] “np”
    >素数(7)
    [1] “p”
    
    这里有几个问题

  • 根据@r2evans注释,if条件需要采用长度为1的输入参数。您可以使用
    all
    命令绕过此问题
  • 您的if条件在逻辑上是错误的。如果mod运算符等于0,则它不是素数。如果你真的想做0
  • 2被认为是质数。您的逻辑对2无效,因为2%2=0。因此,您需要以不同的方式处理该情况。或者该功能需要在3点开始工作
  • 以下是一个工作版本:

    prime <- function(x){
      if(x == 2){
        print("p")
      }
      else if(all(x %% (2:(x-1)) != 0)) {
      print("p")
    } else {
        print("np")
      }
    }
    
    
    > prime(2)
    [1] "p"
    > prime(3)
    [1] "p"
    > prime(4)
    [1] "np"
    > prime(5)
    [1] "p"
    > prime(6)
    [1] "np"
    > prime(7)
    [1] "p"
    
    素数素数(2)
    [1] “p”
    >素数(3)
    [1] “p”
    >素数(4)
    [1] “np”
    >素数(5)
    [1] “p”
    >素数(6)
    [1] “np”
    >素数(7)
    [1] “p”
    
    如果
    要求其条件为长度1,则您的条件远远超出此范围。也许
    !任何(x%%…)
    ?值得注意的是,如果您包含了在尝试函数时收到的任何警告,您将看到
    数值表达式有50个元素:只有第一个使用的
    ,即提示#1,那么
    较长的对象长度不是较短对象长度的倍数
    ,这包含在许多问题/答案中,正如
    一样,条件的长度大于1,并且只使用第一个元素。顺便说一句:根据我的经验,像这样打印东西的函数几乎是无用的。考虑<代码>返回<代码> ING值,而不是<代码>打印< /代码> ING。此外,考虑返回一个逻辑(<代码>真< /代码>或代码> false <代码>)。当我的第一个注释暗示它时,假定<代码>“p”<代码>意味着Prime和<代码>“NP”< /代码>意味着不是Prime——您的逻辑是错误的。如果在
    x%%(2:(x-1))
    中有任何0,那么它就不是素数,因为它可以被除1和自身之外的其他东西整除。
    如果
    要求它的条件是长度1,那么你的条件就远远超出了这个范围。也许
    !任何(x%%…)
    ?值得注意的是,如果您包含了在尝试函数时收到的任何警告,您将看到
    数值表达式有50个元素:只有第一个使用的
    ,即提示#1,那么
    较长的对象长度不是较短对象长度的倍数
    ,这包含在许多问题/答案中,正如
    一样,条件的长度大于1,并且只使用第一个元素。顺便说一句:根据我的经验,像这样打印东西的函数几乎是无用的。考虑<代码>返回<代码> ING值,而不是<代码>打印< /代码> ING。此外,考虑返回一个逻辑(<代码>真< /代码>或代码> false <代码>)。当我的第一个注释暗示它时,假定<代码>“p”<代码>意味着Prime和<代码>“NP”< /代码>意味着不是Prime——您的逻辑是错误的。如果在
    x%%(2:(x-1))
    中有任何0,那么它就不是素数,因为它可以被除1之外的东西和它本身整除。@r2evans:hah!打字错误固定的。谢谢你@埃文斯:哈!打字错误固定的。谢谢你!