R中的素数

时间:2015-07-01 05:47:27

标签: r numbers rstudio primes

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

这是我到目前为止所做的,但我不确定我哪里出错,或者根本不知道如何解决这个问题。我是编程和R的新手,所以我有一段艰难的时间。我已经查看了StackOverflow上的其他问题,试图了解如何更改代码以使其工作,但是没有运气(同样,当我尝试运行这些代码时,它们似乎没有通过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")))

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:2)

(我已经投票将此问题视为重复。但是,我发布了一个答案,以说明如何使用参考文章中提供的代码。)

使用R: Prime number function

中的问题和答案

拥有Table : EmployeeSalary Employee Salary 1 21,000 2 24,000 3 30,000 4 31,000 5 32,000 6 50,000 Table: SalaryBands ID Name MinSalary MaxSalary 1 Tier1 20,000 24,999 2 Tier2 25,000 44,999 3 Tier3 45,000 150,000 100个值的向量:

n

测试唯一编号:

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 包中的isprime

matlab