打印所有小于 50 的质数

Print all prime numbers less than 50

所以我在使用 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 等不是质数,我不知道如何解决这个问题。我的 class 刚开始学习 for 循环和 if/else 语句,所以请不要太花哨。

试试这个:

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 的答案的扩展。

和题中的代码比较相似

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)
}