Меня интересует поиск чисел, которые обладают свойством наличия суммы их собственных делителей, равных числу. Первый пример равен 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)]
Вы может захотеть посмотреть здесь, чтобы проверить ваши результаты: http://www.research.att.com/~njas/sequences/A000396 – nico