朝日新聞2005年7月1日のパズル横丁問題

問題

タナバタ×タナバタ=□□□□□ナバタ

タナバタ×タナバタ×タナバタ=□□□□□□□□タナバタ

という計算式が成り立つように「タナバタ」の各文字に異なる1桁の数字を割り当てる(1桁目と4桁目は「タ」で一致するので同じ数字)。□には任意の数字が入る。

解答への道(ヒント)

早いもので今年ももう半分が過ぎました。

割り当て問題だけど,タナバタの各文字に数字を割り当てるようないつもの方法ではなく,タナバタ自体を変数にして1000から10000までのループを廻すのが簡単。

2乗の場合は下3桁が,3乗の場合は下4桁と一致するから以下のようなコードになる。

int main( int argc, cstring argv[])
{
  for( int tanabata=1000; tanabata< 10000; tanabata++) {
    int   tanabata2 = tanabata*tanabata;
    int64 tanabata3 = (int64)tanabata*tanabata*tanabata;
    if( (tanabata%1000) == (tanabata2%1000) && (tanabata3%10000) == tanabata) {
      prans( tanabata); // まだ解候補の段階
    }
  }
  return    0;
}

prans()は解候補の1桁目と4桁目が一致し,タナバの各桁が一意であることを確認してから解出力する。

答えは1件出力されました。

解速度