打印小于50的所有素数

时间:2017-09-17 18:25:34

标签: r primes

所以我在使用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语句,所以请不要太喜欢。

2 个答案:

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