読者です 読者をやめる 読者になる 読者になる

PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 49 / 素数数列

公差3330の等差数列1487, 4817, 8147は次の2つの変わった性質を持つ。

  1. 3つの項はそれぞれ素数である
  2. 各項は他の項の置換で表される

1, 2, 3桁の素数にはこのような性質を持った数列は存在しないが,4桁の増加列にはもう1つ存在する。

それではこの数列の3つの項を連結した12桁の数を求めよ。

Problem 49 - Project Euler


力づくで解いてしまった感あり。


自分でもぱっと見には何やってるのかわかりませんw

問題文中にある1487を例に,fが何をやっているのか書きます。

  1. IntegerDigits で桁ごとに区切る
  2. Permutations で順列を作る
  3. Map[FromDigits, ] で整数に直す
  4. Select[ , PrimeQ] で素数を抽出
  5. Subsets[ , {3}] で要素数3の部分集合を作成
  6. Select[, #[1] + #[3] == 2*#[2] && #[1] < #[2] &] で等差数列をなす増加列を抽出*1


途中で無駄な順列をたくさん作っていますが,0.06秒で終わりました。4桁の素数は1061個しか(?)なく,Project Euler 的には軽い問題なのかもしれません。

*1:ブログ表示用に二重括弧を一重に変更しています