--- id: 5900f4eb1000cf542c50fffd title: '問題 382: 多角形を生成する' challengeType: 5 forumTopicId: 302046 dashedName: problem-382-generating-polygons --- # --description-- 多角形とは、閉路を形成するように結合された直線分からなる平面図形です。 多角形は少なくとも 3 本の辺で構成され、それ自体と交差することはありません。 以下の条件をすべて満たす正の数 $S$ の集合が多角形 $P$ を生成するものとします。 - $P$ のいずれの 2 辺も長さが異なる - $P$ の各辺の長さが $S$ に含まれる - $S$ にはそれ以外の値が含まれない 以下に例を示します。 集合 {3, 4, 5} は 辺長が 3, 4, 5 の多角形 (三角形) を生成します。 集合 {6, 9, 11, 24} は辺長が 6, 9, 11, 24 の多角形 (四角形) を生成します。 集合 {1, 2, 3} と集合 {2, 3, 4, 9} はいかなる多角形も生成しません。 次のように定義される数列 $s$ を考えます。 - $s_1 = 1$, $s_2 = 2$, $s_3 = 3$ - $n > 3$ のとき、$s_n = s_{n - 1} + s_{n - 3}$ $U_n$ を集合 $\\{s_1, s_2, \ldots, s_n\\}$ と定義します。 例えば、$U_{10} = \\{1, 2, 3, 4, 6, 9, 13, 19, 28, 41\\}$ です。 $U_n$ の部分集合のうち、少なくとも 1 つの多角形を生成する部分集合の数を $f(n)$ とします。 例えば、$f(5) = 7$, $f(10) = 501$, $f(25) = 18\\,635\\,853$ です。 $f({10}^{18})$ の下位 9 桁を求めなさい。 # --hints-- `generatingPolygons()` は `697003956` を返す必要があります。 ```js assert.strictEqual(generatingPolygons(), 697003956); ``` # --seed-- ## --seed-contents-- ```js function generatingPolygons() { return true; } generatingPolygons(); ``` # --solutions-- ```js // solution required ```