所以我在使用R打印我的素数时遇到问题。到目前为止,这是我的代码:
问题:编写R代码以打印小于x = 20的所有素数。您的代码也必须适用于任何其他整数。
prime = 0:50
temp = 0
for(val in prime){
if (val == 0){
next
} else if (val == 1){
next
} else if (val == 2){
TRUE
temp = val
} else if (val %% temp == 0){
next
temp = temp + 1
}
print(val)
}
它会列出以下数字:
[1] 2
[1] 3
[1] 5
[1] 7
[1] 9
[1] 11
[1] 13
[1] 15
[1] 17
[1] 19
[1] 21
[1] 23
[1] 25
[1] 27
[1] 29
[1] 31
[1] 33
[1] 35
[1] 37
[1] 39
[1] 41
[1] 43
[1] 45
[1] 47
[1] 49
我们可以看到,9,15,21,25,27等......不是素数,我不知道如何解决这个问题。我的班级刚刚开始学习for循环和if / else语句,所以请不要太喜欢。
答案 0 :(得分:1)
试试这个:
is.prime <- function(n) n == 2L || all(n %% 2L:max(2,floor(sqrt(n))) != 0)
Filter(is.prime,0:50)
输出:
[1] 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
如果你想知道其中一个功能在做什么,你可以运行吗?在函数描述的函数名之前(例如?max)。
此解决方案是对此question的答案的扩展。
答案 1 :(得分:1)
它与问题中的代码更相似。
prime = 0:50
for(val in prime){
if (val < 2)
next
else {
f = FALSE
for (temp in 2:sqrt(50))
if (val %% temp == 0 && val > temp){
f = TRUE
break
}
if (f) next
}
print(val)
}