R 错误结果将是太长的向量
我试着写一个函数来显示一个数的素数因子。这就是我得到的R 错误结果将是太长的向量,r,function,prime-factoring,R,Function,Prime Factoring,我试着写一个函数来显示一个数的素数因子。这就是我得到的 unipri<- function (n) { q<- NULL for (i in 1:n){if (n%%i==0) p<- c(p, i) } q<- c(1 ,apply(as.matrix(p), 1,function(c) ifelse(all(c%%(2:(c-1))!=0),c,1))) q<- q[!duplicated(q)] return (q)
unipri<- function (n) {
q<- NULL
for (i in 1:n){if (n%%i==0) p<- c(p, i) }
q<- c(1 ,apply(as.matrix(p), 1,function(c) ifelse(all(c%%(2:(c-1))!=0),c,1)))
q<- q[!duplicated(q)]
return (q)
}
unipri更有效的分解方法是递归地进行分解。这里有一个例子
factorise <- function(a,n){ #need 'a' as a cumulative answer in order to retain on recursion. Initially null.
if(n<4){
a <- c(n,a)
} else {
maxtest <- floor(sqrt(n)) #highest possible divisor
odds <- floor(maxtest/2) #number of odd factors to test
totest <- c(2,2*seq_len(odds)+1) #list of possible factors
i <- 1
fac <- FALSE
while(!fac & i<=length(totest)){
fac <- (n %% totest[i] == 0) #found a divisor
if(fac) a <- Recall(c(totest[i],a),n/totest[i]) #recursive bit
i <- i+1
}
if(!fac) a <- c(n,a)
}
return(a)
}
factors <- function(n) {
sort(factorise(numeric(0),n))
}
factors(600851475143)
[1] 71 839 1471 6857
factorse如果您只想获得基本因子,那么包中已经有函数可以这样做。如果你的目标是自己编写算法,那么有比你现有的更有效的方法来完成任务。谢谢。是的,我想自己写算法。有什么建议我应该做些什么来提高效率吗?代码不能正常工作。在与函数第二行中的i连接之前,需要定义p。如果要对非常大的整数进行运算,请查看gmp
包。此外,在循环中,只需i
就可以从1变为n的平方根。