我试图创建一个函数来测试给定的整数是否是质数,我尝试使用以下方法:
tpn <- function(prime.num){
if(prime.num==2){
print("PRIME")
} else {
if(prime.num%%(2:(prime.num-1))!=0){
print("PRIME")
} else {
print("NOT PRIME")
}}}
尽管我不明白为什么,但这是行不通的。我正在检查给定的数字是否可以除以该整数的任何整数而没有余数。如果不能,则数字为素数。
我发现的另一个解决方案是:
tpn <- function(pn){
if(sum(pn/1:pn==pn%/%1:pn)==2)
print("prime")
}
这有效。虽然,我无法理解sum(pn/1:pn == pn%/%1:pn) == 2
实际要测试的内容。
如果除法的结果等于整数除法的结果,则数字a
可被数字整除。任何整数都可以除以至少两个数字:和。质数是那些只能被这两个数相除的数。分解代码:b
a / b
a %/% b
pn
1
pn
pn / 1:pn
是的划分结果通过1
,2
...,pn
pn %/% 1:pn
是整数除法的结果通过1
,2
...,pn
sum(pn / 1:pn == pn %/% 1:pn)
其中有多少相等,即的整数除数的个数pn
。如果此数字为2
,则您有一个质数。您的代码出了什么问题:if
需要测试是否存在某种东西TRUE
,FALSE
但是您正在将其传递给整个矢量。另外,您的逻辑是错误的。应该是:
is.prime <- function(num) {
if (num == 2) {
TRUE
} else if (any(num %% 2:(num-1) == 0)) {
FALSE
} else {
TRUE
}
}
一旦确定要返回逻辑,就可以使代码更短:
is.prime <- function(n) n == 2L || all(n %% 2L:max(2,floor(sqrt(n))) != 0)
(其中包含@Carl关于不检查所有数字的评论。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句