固有約数の合計がその数に等しいという特性を示す数を見つけることに興味があります。最初の例は 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=" ") )
}
次のコードを改善するための提案はありますか? ここで適用機能の1つを使用する必要があると思います。多分これは将来のためのまともなコードゴルフ練習になるでしょうか?
これは宿題の問題ではなく、今日同僚が興味深いコーディングの挑戦者として提起したものです。
アップデート:
詳細な情報を探す場所について、コメントや考えをお寄せくださった皆様に感謝します。sapply を利用する別のソリューションを次に示します。
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]