PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 124 / 順序付き根基

n の"根基"(radical)は rad(n) で表し,n の素因数の積を意味する。たとえば
504 = 2^3 × 3^2 × 7より
rad(504) = 2×3×7 = 42

1 ≤ n ≤ 10 に対して rad(n) を計算し, rad(n) を対象にソートする。rad(n) が同じ場合は n を対象にソートすると以下のようになる.

ソートした表の n の列の k 番目の要素を E(k) とする。たとえば E(4)=8, E(6)=9 である。

rad(n) を 1 ≤ n ≤ 100000 でソートしたときの E(10000) を求めよ。

Problem 124 - Project Euler


データの数が10^5個と Project Euler にしては少なく,易しい問題でした。

rad(n) を求めるのに素因数分解して素数を拾うのがスジな気がしますが,面倒だったので約数から素数を抽出してすませました。あとは問題文の指示通りにソートして,1000番目のデータを求めれば終わりです。

今回の収穫は SortBy の使い方をおぼえたことです。Sort では単一の基準での並べ替えしかできないらしく,stackexchange の記事に助けられました。

mathematica.stackexchange.com