找到R中给定n的k平滑数

时间:2014-07-26 18:41:34

标签: r

需要找到给定n的所有k平滑数。  我尝试了以下方法:

library(gmp)

S <- c(1:30)

test <- function(range, k){
  if(!isprime(k)==2){
    print("k should be a prime number")
  }
  else{
    for(i in range[1]:range[length(range)]){
      pf <- as.integer(factorize(i))
      if(max(pf) <= k){ 
        print(range[i]) 
      }
    }

  }
}

在控制台:test(s,11)

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
[1] 11
[1] 12
[1] 14
[1] 15
[1] 16
[1] 18
[1] 20
[1] 21
[1] 22
[1] 24
[1] 25
[1] 27
[1] 28
[1] 30


 *Warning message:
    In max(pf) : no non-missing arguments to max; returning -Inf*

我想摆脱警告。请帮忙!是factorize()函数返回bigz的问题。将其更改为as.integer(factorize(i))?无法理解警告的原因

2 个答案:

答案 0 :(得分:1)

问题是

factorize(1)
# bigz(0)
length(factorize(1))
# [1] 0

返回一个空向量。当你拿出一个空矢量的最大值时,就会得到那个警告

max(numeric())
# [1] -Inf
# Warning message:
# In max(numeric()) : no non-missing arguments to max; returning -Inf

你到那儿因为

isprime(1)
# 0

所以isprime() 1的定义不是素数。所以我不确定你想如何处理数字1,但那是你的问题。

答案 1 :(得分:0)

问题在于S中的第一个值。

as.integer(factorize(1))生成integer(0)max(integer(0))产生该错误。

你可以这样解决它:

if (length(pf)!=0) {
   if(max(pf) <= k){
      print(range[i]) 
   }
}