問題の声明
一意の連続する素数(必ずしも2を含まない)のセットが与えられた場合、これらの素数の最初のべきのすべての組み合わせ(たとえば、繰り返しなし)と1の積を生成します。たとえば、{ 7}、{1、2、3、5、6、7、10、14、15、21、30、35、42、70、105、210}を生成します:
1 = 1
2 = 2
3 = 3
5 = 5
6 = 2 x 3
7 = 7
10 = 2 x 5
14 = 2 x 7
15 = 3 x 5
21 = 3 x 7
30 = 2 x 3 x 5
35 = 5 x 7
42 = 2 x 3 x 7
70 = 2 x 5 x 7
105 = 3 x 5 x 7
210 = 2 x 3 x 5 x 7
入力セットのカーディナリティがkの場合、出力セットに2 ^ k個のメンバーが含まれることに注意してください。
ルール/条件
- 任意の言語を使用できます。ソースコードの最小文字数を目指します。
- ソリューションは、完全なプログラムまたは完全な機能でなければなりません。関数は匿名にすることができます(言語が匿名関数をサポートしている場合)。
- ソリューションは、少なくとも2 ^ 31までの製品をサポートできる必要があります。製品が大きすぎて表現できない数値が渡された場合、整数オーバーフローの検出や処理について心配する必要はありません。ただし、計算の限界を述べてください。
- リストまたはセットを受け入れ、リストまたはセットを作成できます。入力はソートされていると想定できますが、ソートされた出力を生成する必要はありません。
バックグラウンド
これはいつ、またはなぜ有用ですか?非常に役立つ1つの場所は、乗数のテーブルを生成して、Square Forms Factorizationとして知られる整数ファクタリングアルゴリズムで並列にレースを行うことです。。そこで、奇数の乗数を試してみると、ハードセミプライムでアルゴリズムが失敗する(因子を見つける)確率が約50%減少します。したがって、16個の試行乗数のセットを並列に生成する生成素数{3、5、7、11}のセットでは、アルゴリズムはハードセミプライムで約2 ^ –16回失敗します。素数リストに13を追加すると、32個の試行乗数のセットが生成され、失敗の可能性が約2 ^ –32に減少し、追加の計算費用なしで結果が大幅に改善されます。同じ合計ステップ数でまだ答えを見つけることができます)。