我有兴趣找到表现出其适当除数之和等于该数字的属性的数字。第一个示例是 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=" ") )
}
有没有人对改进以下代码有任何建议?我觉得这里应该使用其中一个应用函数。也许这将是未来一个不错的代码高尔夫练习?
我知道这在这里经常出现,这不是家庭作业问题,只是今天早些时候一位同事冒充一个有趣的编码挑战者。
更新:
感谢大家对寻找更多信息的地方的评论和想法。这是另一个使用 sapply 的解决方案:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]