1より大きい整数のセットを取り、それをXと呼びましょう。S(i)を、iで割り切れるXのすべてのメンバーのセットとして定義します(i> 1)。これらのサブセットから、次のようなセットのグループを選択したい
彼らの和集合はXです
Xの要素は2つのセットにありません。
例えば、我々は再編成することができます{3..11}
よう
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
一部のセットは、この方法では表現できません。我々が取る場合たとえば{3..12}
、12
3と4の両方が相互に排他的であることから、当社のセットを防ぐの倍数です。
一部のセットは複数の方法で表現できます。たとえば{4..8}
、
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
ただし、次のように表すこともできます
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
仕事
私たちの目標は、入力としてセットを受け取り、この方法でそれをカバーする最小数のサブセットを出力するプログラムを作成することです。何もない場合は、正の整数以外の値を出力する必要があります(例:)0
。
これはコードゴルフの質問なので、回答はバイト単位でスコア付けされ、バイト数は少ない方が良いでしょう。
テスト
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
か?のようなものを受け取ることができます[8..4]
か?
12
両方の倍数で3
あり4
、セットが相互に排他的であることを妨げています」:なぜですか?問題ステートメントには12
、両方のサブセットに入る必要があるものは他にありません。
[22,24,26,30]
はすべての倍数です2
。これを削除してサンドボックスする方が良いとは思いませんか?