我正在尝试编写一个函数来计算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")))
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:2)
(我已经投票将此问题视为重复。但是,我发布了一个答案,以说明如何使用参考文章中提供的代码。)
中的问题和答案拥有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