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的平方根。