PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 166 / 十字

0 ≤ d ≤ 9 なる整数 d で埋められた 4x4 の格子がある。以下の格子ではそれぞれの行, 列の和が12であり,斜めの和も12である。

6 3 3 0
5 0 4 3
0 7 1 4
1 2 4 5

0 ≤ d ≤ 9 なる d で 4x4 の格子をそれぞれの行,列,斜めの和が同じとなるように埋める方法は何通りあるか?

Problem 166 - Project Euler


「未知数が16個,等式条件が9個。独立なパラメータは7個なので,データ量は10^7個。楽勝」と思いましたが,実際にやってみたら独立なパラメータは8個で,データ量は10^8個でした。

まず等式条件をReduceで簡約化します。

すべての成分が0以上9以下になるものを数えるとできあがり。30分以上かかりました。ためしに For ループも使ってみましたが,時間はもっとかかります。同じことをC++でやると楽々1分を切れるのですが。