Я заинтересован в нахождении чисел, которые обладают свойством иметь сумму их собственных делителей, равную числу. Первый пример - 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=" ") )
}
У кого-нибудь есть предложения по улучшению следующего кода? Я чувствую, что одна из функций применения должна использоваться здесь. Может быть, это будет достойное упражнение для игры в гольф на будущее?
И, как я знаю, здесь это встречается довольно часто, это НЕ домашняя проблема, просто что-то, что коллега изобразил интересным претендентом на программирование сегодня.
UPDATE:
Спасибо всем за ваши комментарии и мысли о местах, чтобы искать дополнительную информацию. Вот еще одно решение, которое использует sapply:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]