我试图在R中进行一些编程练习,并希望能够检查数字是否为素数,如果不是,则打印出因子。除IF语句之外的这种工作在第一个非零余数处停止。任何建议,将不胜感激。 感谢。
num<-12
x<-2
while(x < num){
if(num%%x == 0){
print(paste(x, "is a factor of", num))
x <- x+1
print(paste(num, "is not a prime number"))
} else {
x <- num
print(paste(num, "is a prime number"))
}
}
答案 0 :(得分:3)
x
整除,那么您还需要增加x
以检查下一个号码,这就是为什么它会立即说15是素数。非常快速和肮脏的实施,有很大的改进空间:
num <- 12
current <- num
x <- 2
while (x <= num - 1){
while (current %% x == 0) {
current <- current / x
print(paste(x, "is a prime factor of", num))
}
x <- x + 1
}
if (num == current) print(paste(num, "is a prime number"))
另外:
R真的不是一种应该做这样的事情的语言
由于它不能被矢量化,因此R是做这些事情的一个非常糟糕的选择。
除非你使用概率测试(在R中也可能很慢),否则即使使用优化,检查素数也可能在计算上非常密集。
如果你想在R里面做低级别的东西,我会研究C ++(和Rcpp)。
答案 1 :(得分:1)
num <- 7 # number to be evaluated
factors <- integer(num - 2) # initialize factors
# loop from 2 to num-1
for (i in 2:(num-1)) {
# check if i is a factor of num
if ((num%%i)==0) {
# add i to vector of factors
factors[i-1] <- i
}
}
# remove factors==0
factors <- factors[factors!=0]
# check if vector factors is not empty
# length(factors) returns false only if factors is empty
if (length(factors)) {
cat(paste(num, "is NOT a prime number. Factors:\n"))
cat(factors)
} else {
cat(paste(num, "is a prime number."))
}
+++ 编辑:按照Roland的建议更改