2015-12-02 93 views
0

我对'R'很陌生,正试图开始学习它。我编写了以下程序来生成给定数量的主要因素。但由于神秘的原因,它在一天结束时会产生一个无意义的名单。我无法找到发生的地方或原因。请你帮忙。计算'R'中的素数因子

library(gmp) 
getPrimeFactors = function(n){ 
    primeList=c() 
    if(isprime(n)){ 
     primeList <- append(primeList, n) 
     return (primeList) 
    } 
    currentPrime <- 2 
    while(TRUE){ 
     # Check if input is divisible by the current primeList 
     if(n %% currentPrime == 0){ 
      cat(sprintf("the number %f is divisible by %f\n", n, currentPrime)) 
      n = n%/%currentPrime 
      cat(sprintf("current prime :%f\n", currentPrime)) 
      primeList = append(primeList,currentPrime) 
      currentPrime = 2 
      if(isprime(n)){ 
       primeList <- append(primeList, n) 
       return (primeList) 
      } 
     } 
     else{ 
      #cat(sprintf("the number %f is NOT divisible by %f\n", n, currentPrime)) 
      #cat(sprintf("current prime before is: %f\n", currentPrime)) 
      print(c("current prime before:", currentPrime)) 
      currentPrime = nextprime(currentPrime) 
      #cat(sprintf("current prime after is: %f\n", currentPrime)) 
      print(c("current prime after:", currentPrime)) 
     } 
    } 
} 
+2

你为什么不使用来自同一个包'factorize'? – nicola

+0

您的预期产量是多少?你的目标是写你自己的这个功能,还是你只是想要得到所有的除数? – etienne

+0

为输入18,我希望输出2,3,3。但我得到:2 1 0 0 0 1 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 3 0 0 0.我现在知道已经有一个分解函数,但我仍然想知道我做错了什么。 – Kevin

回答

0

问题是nextprime(currentPrime)没有返回基本的R数值。它返回一个类bigz的值。看看cat(nextprime(2)的输出。 要修复更改您的代码行

currentPrime = nextprime(currentPrime) 

currentPrime = as.numeric(nextprime(currentPrime)) 
+0

谢谢。我的理智恢复了。我认为nextprime会返回一个整数是多么愚蠢:)这将教会我在调用未知函数之前不要检查文档。 – Kevin