問題(和訳)

https://goo.gl/kaLak3 Problem 45 - PukiWiki

回答

seq 144 100000 | awk '{h=2*$1^2-$1;tx=(-1+sqrt(1+8*h));px=(1+sqrt(1+24*h));if(tx%2==0&&px%6==0){print "T:"tx/2,"P:"px/6,"H:"$1;print "answer:",h;exit}}'

T:55385 P:31977 H:27693
answer: 1533776805

real    0m0.027s
user    0m0.020s
sys     0m0.000s

解説

n=144 から順に六角数を生成し、
最初に五角数にも三角数にもなりえるものを探す

 # n=144 から始める
 seq 144 100000 |
 awk '{
   # 六角数(h)を計算
   h=2*$1^2-$1;
 
   # h=三角数だったと仮定し、三角数のnを求める
   # T(n)=n(n+1)/2=h と置き、nについての2次方程式を求め、
   # nが正の整数になるかを判定する(判定は後続処理で実施)
   tx=(-1+sqrt(1+8*h));
 
   # 五角数についても同様に計算
   # P(n)=n(3n-1)/2=h と置く
   px=(1+sqrt(1+24*h));
 
   # 三角数かつ五角数であれば出力して終了
   # 三角数ならば、tx%2==0
   # 五角数ならば、px%6==0
   if(tx%2==0&&px%6==0){
     print "T:"tx/2,"P:"px/6,"H:"$1;
     print "answer:",h;
     exit
   }
 }'

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-15 (火) 22:03:05