前書き
この課題は、学部の数学コンテストの問題である2009 Putnam B1に触発されました。問題は次のとおりです。
すべての正の有理数は、素数の階乗の積として書けることを示します(必ずしも別個ではない)。例えば、
チャレンジ
あなたの挑戦は、入力として正の有理数の分子と分母(または単に有理数自体)を表す、比較的素数の正の整数のペアを取り、素数の2つのリスト(または配列など)を出力することです入力された有理数は、最初のリストの素数の階乗の積と2番目のリストの素数の階乗の積の比に等しくなります。
ノート
- 最初のリストと2番目のリストの両方に含まれる素数がない場合があります。ただし、素数は、どちらのリストでも何度でも表示できます。
- 入力はそれぞれ(厳密には)1〜65535の間であると想定できます。ただし、出力する必要がある数値の階乗がこの範囲にあるとは限りません。
入力と出力の例
有効な入力と出力の例を次に示します。
input=>output
10,9 => [2,5],[3,3,3]
2,1 => [2],[]
3,1 => [3],[2]
1,5 => [2,3,2],[5] (elements of a list may be in any order)
3,2 => [3],[2,2]
6,1 => [3],[]
入力(2,2)、(0,3)、(3,0)、(3,6)および(1,65536)は不正な入力です(つまり、プログラムは特定の方法で動作する必要はありません) )。不正な出力の例を次に示します。
1,2 => [2],[2,2] (2 is in both returned lists)
5,2 => [5],[2,4] (4 is not prime)
2,1 => [2],[1] (1 is not prime either)
3,2 => [3],[2] (3!/2! = 3, not 3/2)
得点
これはcode-golfなので、バイト単位の最低スコアが勝ちです!
10/9
数値のペアではなく分数として入力を受け入れても大丈夫ですか?10
と9
?
10/9
=[2*5]/[3*3]
=[(2!/1!) * (5!/4!)] / [(3!/2!) * (3!/2!)]
=[2! * 5! * 2! * 2!] / [3! * 3! * 1! * 4!]
=(2! * 2! * 2! *5!) / (3! * 3! * 4!)
。