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
我正在尝试编写一个函数来计算所有低于 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