需要找到给定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))?无法理解警告的原因
答案 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])
}
}