R中的质数

prime numbers in R

我正在尝试编写一个函数来计算所有低于 100 的素数。不幸的是,我需要使用 mod R 中的除法函数 (%%) 来测试从 1 到 100 的每个数字对所有它下面的值和最终输出应该导致所有质数的向量。

这是我目前所知道的,但我不确定我哪里出错了,或者根本不知道如何解决这个问题。我是编程和 R 的新手,所以我遇到了一些困难。我查看了 Whosebug 上的其他问题,试图了解如何更改代码以使其正常工作,但运气不佳(另外,当我尝试 运行 这些代码时,它们似乎没有通过 R 生成响应)。

prime <- function(x){
for(i in 1:100)
if(x==1){print("TRUE")}
if((x %% (1:x-1))==0){print("TRUE")}
else{print("FALSE")}


print(seq(as.numeric("TRUE")))

任何帮助将不胜感激!

谢谢!

(我已经投票决定关闭这个重复的问题。但是,我 post 一个答案来展示如何使用参考文献 post 中提供的代码)。

使用 R: Prime number function

中的问题和答案

具有 n 个包含 100 个值的向量:

n <- 1:100

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

测试唯一编号:

is.prime1(1)
#[1] FALSE

is.prime1(2)    
#[1] TRUE

但是您需要 Vectorize 这个函数才能使用值向量作为输入:

is.prime1 <- Vectorize(is.prime1)

给出

is.prime1(n)
#  [1] FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE
# [20] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
# [39] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
# [58] FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
# [77] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
# [96] FALSE  TRUE FALSE FALSE FALSE

现在,质数:

n[is.prime1(n)]
# [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97    

同上:

# Seconde function:
is.prime2 <- function(n) n == 2L || all(n %% 2L:ceiling(sqrt(n)) != 0)
is.prime2 <- Vectorize(is.prime2)

n[is.prime2(n)]
# [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

使用 matlab 包中的 isprime

library(matlab)
n[as.logical(isprime(n))]
# [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97