我正在尝试用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"))
}
}发布于 2016-04-04 19:58:40
,
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)。
发布于 2016-04-04 19:59:04
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."))
}+++编辑:按照罗兰的建议进行更改
https://stackoverflow.com/questions/36401364
复制相似问题