代码之家  ›  专栏  ›  技术社区  ›  Renee

打印所有小于50的素数[重复]

  •  0
  • Renee  · 技术社区  · 7 年前

    所以我用R打印素数时遇到问题。这是我目前的代码:

        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 回复  |  直到 7 年前
        1
  •  2
  •   www    7 年前

    试试这个:

    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
    

    此解决方案是对此问题答案的扩展 question

        2
  •  1
  •   vollitwr    7 年前

    它更类似于问题中的代码。

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