LoginSignup
2
2

More than 5 years have passed since last update.

Project Euler Q23 【非過剰数和】

Last updated at Posted at 2017-11-08

Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。

問題

完全数とは, その数の真の約数の和がそれ自身と一致する数のことである. たとえば, 28の真の約数の和は, $1 + 2 + 4 + 7 + 14 = 28$ であるので, 28は完全数である.

真の約数の和がその数よりも少ないものを不足数といい, 真の約数の和がその数よりも大きいものを過剰数と呼ぶ.

12は, $1 + 2 + 3 + 4 + 6 = 16$ となるので, 最小の過剰数である. よって2つの過剰数の和で書ける最少の数は24である. 数学的な解析により, 28123より大きい任意の整数は2つの過剰数の和で書けることが知られている. 2つの過剰数の和で表せない最大の数がこの上限よりも小さいことは分かっているのだが, この上限を減らすことが出来ていない.

2つの過剰数の和で書き表せない正の整数の総和を求めよ.

解答

※実行には4分くらいかかります。

seq 28123 |
awk '{for(i=1;i<=$1;i++){if($1%i==0){s[NR]+=i}};print s[NR]-NR,NR}' |
awk '$1>$2{printf $2" "}' |
awk '{for(i=1;i<=NF;i++){for(j=i;j<=NF;j++){print $i+$j}}}' |
sort -u |
join -v1 <(seq 28123 | sort) - |
awk '{s+=$1} END{print s}'
4179871

できたけど約数の和を算出する処理でどうしても時間がかかってしまう。

答え合わせ

こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/023.html

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2