Ich bin daran interessiert, die Zahlen zu finden, die die Eigenschaft aufweisen, dass die Summe ihrer richtigen Teiler gleich der Zahl ist. Das erste Beispiel ist 6, wobei die richtigen Teiler 1 + 2 + 3 = 6 sind.Algorithmus, um richtige Teiler zu bestimmen
Ich habe den folgenden Code in R geschrieben, aber ich fühle, dass es ziemlich ineffizient ist und erheblich verbessert werden kann.
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=" ") )
}
Hat jemand irgendwelche Vorschläge zur Verbesserung des folgenden Codes? Ich denke, eine der Anwendungsfunktionen sollte hier verwendet werden. Vielleicht wäre dies eine anständige Code-Golf-Übung für die Zukunft?
Und wie ich weiß, kommt das hier etwas häufig vor, das ist KEIN Hausaufgabenproblem, nur etwas, was ein Kollege früher als interessanter Kodierungsherausforderer stellte.
UPDATE:
Vielen Dank an alle für Ihre Kommentare und Gedanken an Orte für weitere Informationen zu suchen. Hier ist eine andere Lösung, die sapply nutzt:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]
Sie Vielleicht möchten Sie hier einen Blick auf Ihre Ergebnisse werfen: http://www.research.att.com/~njas/sequences/A000396 – nico