打印所有小于 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)
}
所以我在使用 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)
}