フィボナッチ数列(awk版)
さて、以前の問題をperlで解いていましたが、awkで解き直してみました。
まずは、これ。
#!/usr/bin/gawk -f BEGIN{ PREC = 100; before = 0; cnt = 0; n = 1; while(1){ fibona = fibo(n); fibo_div = fibona / sp(fibona); if(fibo_div == int(fibo_div)){ cnt++; if(cnt > 7){ print fibona; } if(cnt > 11){ break; } } n++; } } function fibo(num){ if(memo[num] == ""){ if((num == 0) || (num == 1)){ memo[num] = 1; }else{ memo[num] = fibo(num - 2) + fibo(num - 1); } } return memo[num]; } function sp(n, ret,total){ split(n,ret,""); total = 0; for (i in ret){ total += ret[i]; } return total; }
PRECというのは精度で数字が高ければ正確な精度が出る(と思う)
今回はPREC=100で計算。
実行時は-Mオプションを忘れずに。
gawk -M -f q11.awk 2584 14930352 86267571272 498454011879264 160500643816367088
もし、PRECをソースコードに入れなければ、下記のようにしても良い。
gawk -M -v PREC=100 -f q11.awk 2584 14930352 86267571272 498454011879264 160500643816367088
-Vオプションは変数代入に使う。