Estoy interesado en encontrar los números que exhiben la propiedad de tener la suma de sus divisores adecuados igual al número. El primer ejemplo es 6, donde los divisores adecuados son 1 + 2 + 3 = 6.Algoritmo para determinar los divisores adecuados
Escribí el siguiente código en R, pero creo que es bastante ineficiente y puede mejorarse significativamente.
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=" ") )
}
¿Alguien tiene alguna sugerencia para mejorar el siguiente código? Creo que una de las funciones de aplicar debería usarse aquí. Tal vez esto sería un ejercicio decente de golf de código para el futuro?
Y como sé que esto aparece con cierta frecuencia aquí, esto NO es un problema de tarea, simplemente algo que un compañero de trabajo planteó como un retador de codificación interesante el día de hoy.
ACTUALIZACIÓN:
Gracias a todos por sus comentarios y pensamientos en lugares en busca de más información. Aquí hay otra solución que utiliza sapply:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]
Usted Quizás quiera echar un vistazo aquí para verificar sus resultados: http://www.research.att.com/~njas/sequences/A000396 – nico