問題概略
次のルールに従って2つの自然数 , の組を作ります。
- , は 720 の約数
- と は互いに素
この条件をみたす の個数を求めてください。
解説の pdf も作りました。きれいなレイアウトで読みたい方はこちらをどうぞ。
素因数分解して指数に注目する
より , とおけます。
これらが互いに素な条件を考えます。
- と の少なくとも一方は 0
- と の少なくとも一方は 0
- と の少なくとも一方は 0
- 「~ がすべて 0」のとき になるので不適
は次の 9 通りあります。
一般に素因数分解の指数が なら,その素数に対する と の指数のペアは 通りです。
は 通りあって, は 通りあります。
これらの積から「指数がすべて 0」の 1 通りを除くと
この中には のものと のものが同じ個数ずつ含まれています。
2 で割った 67 組が答えです。
おまけ:プログラムの速度比較
愚直解法
Divisors@720, {2}] で 720 の約数の組を作って,CoprimeQ で互いに素なものを抽出すると 秒。
In[]:= AbsoluteTiming[ lst = Subsets[Divisors@720, {2}]; ans = Length@Select[lst, CoprimeQ[#[[1]], #[[2]]] &]] Out[]= {0.0005651, 67}
指数に注目
素因数分解して指数に注目する解法だと 秒。
- FactorInteger で を因数分解して素因数と指数のリストを作る。720 の場合, を得る
- 指数 を取り出して に変換
- などの積から 1 を引いて 2 で割ったものが答え
In[]:= AbsoluteTiming[ lst = FactorInteger@720; f[{x_, y_}] := 2 y + 1; g[lst_] := (Times @@ lst - 1)/2; ans = g@(f /@ lst)] Out[]= {0.0000674, 67}