朝日新聞2006年2月3日パズル横丁解答

プログラムの実行結果は以下の通り。

a:1600000, b:1200000, c:900000
a+b+c=3700000

プログラムのソースは以下の通り。

#include "puzutl.h"
#include <math.h>

int main( int argc, cstring argv[])
{
  const int s370 = 3700000;
  const int cmax = s370 / 3;
  int64     ctmp, croot;
  int       a, b;
  for( int c=1; c< cmax; c++) {
    ctmp        = (int64)4*s370*c - (int64)3*c*c;
    croot       = (int)sqrt((double)ctmp);
    if( croot*croot == ctmp) {
      b = (croot - c) / 2;
      a = (int64)b*b/c;
      if( a+b+c == s370) {
        ps( "a:%d, b:%d, c:%d\n", (int)a, (int)b, (int)c);
        ps( "a+b+c=%d\n", (int)(a+b+c));
      }
    }
  }
  return    0;
}