我在 RStudio 版本 0.97.336 中使用 R 版本 2.15.3 (2013-03-01) - Xubuntu 12.10 3.8.8-030808-generic 上的“安全毯”。
我编写了一个算法,它为 Project Euler 的第五个问题提供了一个通用的解决方案:
“2520 是可以除以 1 到 10 的每个数字而没有任何余数的最小数字。
可以被 1 到 20 的所有数字整除的最小正数是多少?”(http://projecteuler.net/problem=5)?
程序不断发现 min=116396280,而答案是 232792560(2*116396280)。单击我们的测试向量会显示 test[16]=7274767.5,但是,手动输入test[16]
会返回 7274768。此外,当手动输入时,应该identical(test,floor(test))
返回。FALSE
为什么当 R 经历这些循环时它忽略了这个事实7274767.5!=floor(7274767.5)
?
pe5<-function(n){
p<-c()
for(x in 1:n){
while(x!=1){
y<-2
z<-0
while(x!=z){
z<-x/y
if(z==floor(z)){
x<-z
p<-append(p,y)
}else{
y<-y+1
}
}
}
}
min<-0
test<-rep(0,n)
x<-2520
while(min==0){
for(i in unique(p)){
test[i]<-x/i
}
if(identical(test,floor(test))==TRUE){
min<-x
}else{
x<-x+2520
}
}
print(min)
}
pe5(20)