は、合計がxになる2のべき乗のリストとして定義します。例えば、V (35 )= [ 32 、2 、1 ]。
慣例により、ここではパワーが最高から最低の順にソートされます。ただし、チャレンジのロジックや予想されるソリューションには影響しません。
仕事
半素数 与えられた場合、V (N )の各項を、この項を合計する別の2のべき乗のリストで置き換えます。結果として生じるすべてのサブリストの和集合は、次のように定義される行列Mの正確なカバーです
ここで、とQはNの素因数です。
これはいくつかの例で理解するのがはるかに簡単です。
例1
、我々は持っています:
- 及び V (P )= [ 4 、2 、1 ]
- 及び V (Q )= [ 2 、1 ]
オンにの正確なカバーにM、我々は分割することができる16の中に8 + 4 + 4及び4に2 + 2ながら、1は変更されません。したがって、可能な出力は次のとおりです。
別の有効な出力は次のとおりです。
例2
、我々は持っています:
- 及び V (P )= [ 32 、4 、1 ]
- と V (Q )= [ 16 、4 、2 、1 ]
可能な出力は次のとおりです。
ルール
- 因数分解はチャレンジの主要部分ではないため、PとQを交互に入力として使用できます。
- 複数の可能な解決策が存在する場合、それらのうちの1つだけを返すか、すべてを返すことができます。
- サブリストの順序は関係なく、各サブリスト内の用語の順序も関係ありません。
- これはコードゴルフです!
テストケース
Input | Possible output
-------+-----------------------------------------------------------------------------
9 | [ [ 4, 2, 2 ], [ 1 ] ]
15 | [ [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
21 | [ [ 8, 4, 4 ], [ 2, 2 ], [ 1 ] ]
51 | [ [ 32 ], [ 16 ], [ 2 ], [ 1 ] ]
129 | [ [ 64, 32, 16, 8, 4, 2, 2 ], [ 1 ] ]
159 | [ [ 64, 32, 32 ], [ 16 ], [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
161 | [ [ 64, 32, 16, 16 ], [ 8, 8, 4, 4, 4, 2, 2 ], [ 1 ] ]
201 | [ [ 128 ], [ 64 ], [ 4, 2, 2 ], [ 1 ] ]
403 | [ [ 128, 64, 64 ], [ 32, 32, 16, 16, 16, 8, 8 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
851 | [ [ 512 ], [ 128, 64, 64 ], [ 32, 16, 16 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
2307 | [ [ 1024, 512, 512 ], [ 256 ], [ 2 ], [ 1 ] ]