66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| 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
 | |
| ```
 |