Cha*_*ase 5 refactoring r apply
我有兴趣找到表示其正确除数的总和等于数字的属性的数字.第一个例子是6,其中适当的除数是1 + 2 + 3 = 6.
我在R中编写了以下代码,但我觉得它非常低效并且可以显着改进.
propDivisor <- function(
max
)
{
n<-{}
for(j in 2:max){
m<-{}
for(i in 1:(j/2+1)){
if(j%%i==0){m<-c(m,i)}
}
if(sum(m)==j){n<-c(n,j)}
}
return(cat("The proper divisors between 1 and", max, "are", n, ".", sep=" ") )
}
Run Code Online (Sandbox Code Playgroud)
有没有人有任何改进以下代码的建议?我觉得应该在这里使用其中一个apply函数.也许这对未来来说是一个不错的代码高尔夫练习?
而且我知道这在某种程度上经常出现,这不是一个家庭作业问题,只是同事今天早些时候作为一个有趣的编码挑战者提出的问题.
更新:
感谢大家对于寻找更多信息的地方的意见和想法.这是利用sapply的另一个解决方案:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]
Run Code Online (Sandbox Code Playgroud)