2014-07-26 25 views
0

需要查找给定n的所有k-平滑数字。 我试过如下:查找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]) 
     } 
    } 

    } 
} 

在控制台:测试(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))?无法理解的原因警告

回答

0

问题是与S中的第一个值

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

您可以修复它,如下所示:

if (length(pf)!=0) { 
    if(max(pf) <= k){ 
     print(range[i]) 
    } 
} 
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,但那是你的问题。