---
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
```
