2

フォロワー2800人突破記念問題の解答

33
0

はじめに

この記事では、先日私のTwitterアカウントのフォロワー数が2800人を突破したことを記念して作った問題の解説をします。
こんな問題です。

問題

第1世代~第7世代 第1世代~第7世代

どうせ答えが 2800 になるんでしょ」と思いましたか?

……そのとおりです。答えは 2800 です()

この記事ではそれを4+1 とおりの方法で求めてみたいと思います。

解答

解法1 がんばって数える

第30世代はこんな感じになります。

頑張って数えよう 頑張って数えよう

世代数入り 世代数入り

大変そうに見えますが、対称性を使って正方形のカタマリごとに数えれば手作業でも数えることができます。

正方形のカタマリに分割して数える 正方形のカタマリに分割して数える

大きい正方形のカタマリから順に足し合わせていくと

322+4382+4942+42722=2800

これが一番簡単かもしれませんね。。

解法2 漸化式を作る

別の解法として、成長過程を観察して法則を見つけることで漸化式を作ることができます。

第1世代~第7世代 第1世代~第7世代

1,2,4,8, 世代、つまり 2n と表現できる世代で全体が正方形となり、その大きな正方形の4頂点を起点として過去の成長過程を繰り返していることがわかりますでしょうか。

新たに成長するときは、増える面積は34×4=3 倍に増えていますから、第 n 世代の面積を S(n) とすると次のような漸化式を作ることができます。

漸化式

s12sn を満たす最大の整数とし、t=n2s とするとき、次が成り立つ。

S(n)=S(2s+t)=4s+1+3S(t)

ただし S(0)=0 とします。

この漸化式を繰り返し使うことで答えが得られます。

S(30)=S(24+14)=45+3S(14)

S(14)=S(23+6)=44+3S(6)

S(6)=S(22+2)=43+3S(2)

S(2)=S(21+0)=42

S(30)=45+344+3243+3342=2800

解法3 二進法を使う

さて、解法2に出てきた漸化式の形が 2 進法ととても相性がよさそうな形をしていますね?ですよね?

そのことを確認するために、n を2進数で表したものと、漸化式から得られる式を並べてみましょう。

n2進法S(n)
11414
2104216
31142+314128
41004364
510143+314176
611043+3142112
711143+3142+3241148
8100044256
9100144+3141268

この表から、次のルールで数列a、数列bを作り、それをもとに「式」を作ればいいことがわかります。

n2進法数列a数列bS(n)
11411414
2104214216
31142,411,342+314128
41004314364
510143,411,343+314176
611043,421,343+3142112
711143,42,411,3,3243+3142+3241148
8100044144256
9100144,411,344+3141268

もう少し詳しく説明しましょう。

an,k を「n2 進法で表したときの下から k+1 桁目の数」(0kcn)
bn,k を「n2 進法で表したときの下から k+1 桁目以上の桁にある"1"の数」(0kcn)
cn を 「(n2 進法で表したときの桁数) 1

とすると、S(n) は次のようにあらわすことができることがわかります。

S(n)=i=0cn4i+1an,i3bn,i1

一般項を求める

さらに、an,k , bn,k , cn は次のように表すことができますから

an,k=n2k2n2k+1

bn,k=j=0cnkan,cnj

cn=log2n

代入して整理すると一般項を次のように表すことができます。

S(n) =43i=0log2n4i3(j=0log2nin2log2nj2n2log2nj+1)n2i2n2i+1

なかなかいかつい式になってしまいました。

解法4 階差数列を考える

階差数列を d(n) とします。 2 進法の表現と d(n)/4 を並べてみるとつぎのようになります。

n2 進法d(n)/4
113
2103
31132
41003
510132
611032
711133
810003
9100132

n2 進法で表したときの "1" の数」が、3 の指数になっていることが分かりますね。
つまり、d(n)/4=3bn,0 ということです。階差数列を足せば S(n) を復元できますので

S(n)=i=0n13d(i)=4i=0n13bi,0

この式に先ほどの式を代入することで次のような一般項が得られます。

S(n)=4i=0n13bi,0=4i=0n13j=0ciai,cij=4i=0n13j=0cii2cij2i2cij+1

解法5 第32世代 から考える

これは私の問題に対し、Oknow(@OknowC)さんが解いてくれたときの解法です。

Tweetへのリンク

S(30)=S(32)d(31)d(30)=46435434=4096972324=2800

これは計算が楽ですね!

おわりに

なんとなく作ってみた問題でしたが、再帰的な構造がなかなか楽しいですね。
ちょっと競技プログラミングぽい問題になった気がします。

競技プログラミングなら、S(N)1N109 の制約で求めよ、みたいになって、解法4だと TLE になって、解法3 で AC になりそうですね。

フォロワーさんの数もこの問題のようにじわじわ増えてきました。
みなさんのフォローありがとうございます。

今後ともよろしくお願いします!

最後に、この問題のために作ったDesmosファイルを置いておきますので遊んでみてくださいね。

Desmosファイル

投稿日:202272
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

apu_yokai
apu_yokai
489
67846

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 問題
  3. 解答
  4. 解法1 がんばって数える
  5. 解法2 漸化式を作る
  6. 解法3 二進法を使う
  7. 解法4 階差数列を考える
  8. 解法5 第32世代 から考える
  9. おわりに