朝日新聞2004年12月25日のパズルパーク問題その1

問題

a**3 + b**3 + c**3 + d**3 = 2005 を満たすa,b,c,dを求める。

解答への道(ヒント)

飼っているリュウキンが本日急に危篤状態。危篤になるのはこれで3回目だ。

20**3 = 8000 > 2005 なので,a,b,c,dを20まで虱潰すプログラムを作成する。

for( int a=1; a< 20; a++) {
  for( int b=1; b< 20; b++) {
    for( int c=1; c< 20; c++) {
      for( int d=1; d< 20; d++) {
        int s = a*a*a + b*b*b + c*c*c + d*d*d;
        if( s == 2005) ps( "Find %d^3 + %d^3 + %d^3 + %d^3 = 2005\n", a, b, c, d);
        cnt++;
      }
    }
  }
}

但しこれだと解が沢山出力されて見にくいので,以下のように重複除去の処理を入れる。

for( int a=1; a< 20; a++) {
  for( int b=a; b< 20; b++) {
    for( int c=b; c< 20; c++) {
      for( int d=c; d< 20; d++) {
        int s = a*a*a + b*b*b + c*c*c + d*d*d;
        if( s == 2005) ps( "Find %d^3 + %d^3 + %d^3 + %d^3 = 2005\n", a, b, c, d);
        cnt++;
      }
    }
  }
}

この結果出力は一件になった。

解速度