ピタゴラス数を求める
元は Project Euler からですが、id:mzp さんのを見て awk でやってみようと思ったのでした。
#! /usr/bin/gawk -f # pythag.awk - ピタゴラス数を求める # URL: http://odz.sakura.ne.jp/projecteuler/index.php?Problem%209 BEGIN { for (a = 1; a < 1000; a++) { # b の範囲も a, c で変更 for (b = 1; b < 1000 - a - c; b++) { # c を従属変数にして 3 重ループを避ける c = sqrt(a ^ 2 + b ^ 2); # a < b を条件に加えないと解が 2 つ存在する if (c % 1 == 0 && a + b + c == 1000 && a < b) { print a, b, c, a * b * c; # 解は 1 つなので、以下の exit を有効にしても OK ##exit; } } }
時間がかかると思っていたけど、意外にすぐに見つかりました。
b, c を従属変数にして、整数かどうかを '%' 演算子で求めていますが、2 つめのループは危険ですね。せめて c ではなく int(c) かな。(w
$ time gawk -f pythag.awk 200 375 425 31875000 gawk -f pythag.awk 0.38s user 0.01s system 93% cpu 0.419 total
Celeron 600 MHz だとこんなもんかな。