2014-07-26 29 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,但那是你的問題。