「2つの整数を選び、その平方の差を新しい数として入れる」という単純なゲームがあります。
では、36個の連続整数を用意したとき、どんなスタート地点から始めても、最後に 0 まで持っていけるのでしょうか?
この記事では、Zhao Shen と Youran Wu の2026年8月31日に公開されたプレプリント Reducing Every Set of 36 Consecutive Integers to Zero by Differences of Squares (SW arXiv:2609.00098 )を紹介します。
問題自体が一見パズルのようで、その解決模様も合同式と「同じ数を2通り作る」という、構成は巧妙ながら高校生でも十分理解可能な題材と思われたため、ここに紹介します。
整数 $a,b$ に対して、次の操作を定めます。
$$ F(a,b)=|a^2-b^2|. $$
集合の中から2つ $a,b$ を取り出し、その2つを消して代わりに $F(a,b)$ を1つ入れます。
たとえば
$$ 3,7 \longrightarrow |3^2-7^2|=40 $$
です。
1回操作するたびに、数の個数は1つ減ります。したがって、36個から始めれば35回操作したところで、最後には1個だけ残ります。
その最後の1個を 0にできる とき、「その集合は0に還元できる」と呼ぶことにします。これは論文SWの定義そのものです。
2つの数を選び、$|a^2-b^2|$ に置き換える。この操作を繰り返す。
ここで問題を具体化します。
$$ \{n,n+1,n+2,\ldots,n+35\} $$
という36個の連続整数を考えます。
問いはこうです。
どんな整数 $n$ に対しても、この36個を0に還元できるか?
この問題を考えた Hickerson と Kleber は、24個と60個の連続整数についてはすでに還元可能であることを示していました。一方、長さ12は不可能で、36だけが残った難しいケースでした。今回の論文SWは、その36を解決します。
結論として
$$ \text{任意の }n\in\mathbb Z\text{ について }\{n,n+1,\ldots,n+35\}\text{ は0に還元できる。} $$
です。
しかも論文では、長さ $L$ について完全に分類して、
$$ \text{すべての }n\text{ に対して還元可能} \iff 12\mid L\ \text{かつ}\ L\ge24 $$
まで証明しています。
では、なぜ「12」が出てくるのでしょうか?
ここが最初の面白いポイントです。
$p=2,3$ に対して
$$ \mathbf 1_p(a)= \begin{cases} 1 & (p\nmid a),\\ 0 & (p\mid a) \end{cases} $$
とおきます。
たとえば $p=2$ なら、これは「$a$ が奇数なら1、偶数なら0」です。
$a^2$ は、 $2$ や $3$ をmodとして見ると非常に単純です。どちらのmodでも、0でない数の平方は1になります。
そのため、平方差を取る操作では
$$ \mathbf 1_p(F(a,b)) \equiv \mathbf 1_p(a)+\mathbf 1_p(b)\pmod 2 $$
が成り立ちます。つまり、集合の中で「2で割り切れない数の個数の偶奇」も、「3で割り切れない数の個数の偶奇」も、操作をしている間ずっと変わりません。
操作をしても、ある個数の「偶奇」は変化しない。
もし長さ $L$ の連続整数が、すべての $n$ について還元できるとします。
$L$ が奇数なら、
$$ I_L(0)=\{0,1,\ldots,L-1\} $$
と
$$ I_L(1)=\{1,2,\ldots,L\} $$
のどちらかで、奇数の個数が奇数になります。ところが最終的に0だけを残したいなら、その個数の偶奇は0でなければいけません。矛盾です。
したがって $L$ は偶数です。
さらに、連続する $L$ 個の整数には $L/2$ 個の奇数が含まれるので、$L/2$ も偶数である必要があります。つまり
$$ 4\mid L. $$
同様の議論で、3で割り切れない数の個数を考えると
$$ 3\mid L $$
が必要になります。
したがって
$$ 4\mid L, \qquad 3\mid L, $$
より
$$ 12\mid L $$
が必要です。SWのLemma 2.1は、この議論を厳密にまとめています。
つまり「36」という数字は突然現れたわけではありません。
まず、12の倍数しか候補になれないのです。
ここからが本番です。
SWの核心は、次の6個の数についての恒等式です。
$$ \{x,x+7,x+8,x+12,x+13,x+20\} $$
この6個は、どんな整数 $x$ に対しても0に還元できます。
ポイントは、次の2つの計算がまったく同じ数になることです。
$$ F(F(x+7,x+8),x) =3|(x+5)(x+15)|, $$
一方で
$$ F(F(x+12,x+13),x+20) =3|(x+5)(x+15)|. $$
つまり、左側の3個から作った数と、右側の3個から作った数が一致します。
6個の数を2つのルートから同じ中間値に持っていく。
同じ数 $y$ が2つできたなら、あとは
$$ F(y,y)=|y^2-y^2|=0 $$
なので終了です。
この6個の「部品」が、36個を解く鍵になります。SWではこれをLemma 3.1として使っています。
次に、0から35までの36個の「ずれ」を5つのグループに分けます。
$$ A_1=\{0,1,7,11,24,28,34,35\}, $$
$$ A_2=\{2,9,10,14,15,22\}, $$
$$ A_3=\{3,4,12,16,19,23,31,32\}, $$
$$ A_4=\{13,20,21,25,26,33\}, $$
$$ A_5=\{5,6,8,17,18,27,29,30\}. $$
この5つを足し合わせると、ちょうど
$$ \{0,1,2,\ldots,35\} $$
全部になります。したがって、任意の $n$ に対して $n+A_i$ を5つのブロックとして処理すればよいことになります。
36個のずれを5つのブロック $A_1,\ldots,A_5$ に分割する。
ここで驚くべきことに、5ブロックそれぞれが独立に0へ還元できます。
$A_2$ は
$$ \{2,9,10,14,15,22\} $$
です。
これは6個の恒等式
$$ \{x,x+7,x+8,x+12,x+13,x+20\} $$
に $x=n+2$ を代入したものになっています。
同様に $A_4$ は $x=n+13$ を代入した形です。
したがって、$A_2$ と $A_4$ はすぐに0へ還元できます。
次は
$$ A_1=\{0,1,7,11,24,28,34,35\}. $$
論文では、
$$ F(F(n,n+34),F(n+1,n+35)) $$
と
$$ F(F(n+7,n+24),F(n+11,n+28)) $$
がどちらも
$$ 4624|2n+35| $$
になることを示します。
したがって、この2つの4個組から同じ数が2つ作られ、最後は $F(y,y)=0$。
これで $A_1$ も終了です。
ここまで見るに、この証明の中心的なアイデアは
「計算した結果を0にする」のではなく、「同じ結果を2通り(ペアで)作る」
が本質なのかもしれません。
$$ A_3=\{3,4,12,16,19,23,31,32\} $$
では、まず4組のペアを作ります。
$$ (n+3,n+32), $$
$$ (n+4,n+31), $$
$$ (n+12,n+23), $$
$$ (n+16,n+19). $$
ここで
$$ M=|2n+35| $$
とおくと、4つの平方差は綺麗に
$$ 29M,\qquad27M,\qquad11M,\qquad3M $$
になります。
さらに
$$ F(29M,27M)=112M^2 $$
であり、同時に
$$ F(11M,3M)=112M^2 $$
です。
またしても「同じ数を2通り作る」ことに成功しました。
したがって、$A_3$ も0に還元できます。
最後の
$$ A_5=\{5,6,8,17,18,27,29,30\} $$
も同じ思想です。
論文では、2つの4個組から得られる値がともに
$$ 363|(2n+29)(2n+41)| $$
になることを示します。
したがって、ここでも同じ値が2つ現れ、最後に0になります。
これで $A_1,A_2,A_3,A_4,A_5$ のすべてが0になりました。
最後は
$$ F(0,0)=0 $$
を何度か使えば、5つの0を1つの0にまとめられます。
これで証明完了です。
ここまでの議論は数学的な証明ですが、まず小さいケースを計算機で遊んでみると、この問題がより身近になります。コードはChatGPTの助けを大いに借りました。ありがとうChatGPT
状態数は非常に速く増えるので、36個を総当たりするプログラムではありません。まずは小さい集合について、「0にできるか」を調べます。
from functools import lru_cache
def moves(state):
"""Apply one move to a sorted tuple of integers."""
n = len(state)
for i in range(n):
for j in range(i + 1, n):
a, b = state[i], state[j]
rest = [state[k] for k in range(n) if k not in (i, j)]
rest.append(abs(a * a - b * b))
yield tuple(sorted(rest))
@lru_cache(None)
def reducible(state):
"""True if state can be reduced to a final 0."""
if len(state) == 1:
return state[0] == 0
return any(reducible(next_state) for next_state in moves(state))
for L in range(1, 9):
ok = reducible(tuple(range(L)))
print(L, ok)
このコードのポイントは、集合を「状態」として保存し、可能なすべての1手先を再帰的に調べることです。
ただし、$L$ が少し大きくなるだけで組み合わせ量が増え、探索量は爆発します。これこそが、数学的にカッチリした構成が重要になる理由です。
例えば6個の基本ブロックについて、本当に2つの経路が同じ値になるのかを確認してみます。
def F(a, b):
return abs(a * a - b * b)
def verify_six_identity(x):
left = F(F(x + 7, x + 8), x)
right = F(F(x + 12, x + 13), x + 20)
return left, right
for x in range(-3, 4):
left, right = verify_six_identity(x)
print(x, left, right, left == right)
出力の最後の列がすべて True になれば、少なくともいくつかの具体例では恒等式を確認できます。
実際には
$$ F(F(x+7,x+8),x) =3|(x+5)(x+15)| $$
が恒等的に成り立つので、コンピュータ実験ではなく手計算で証明できます。
最初に与えられた問題は
$$ \{n,n+1,\ldots,n+35\} $$
という、ただの連続整数です。
ところが証明では、突然
$$ \{x,x+7,x+8,x+12,x+13,x+20\} $$
という不思議な6個組が登場します。
そして、2つの異なるルートから同じ数を作ります。
これは「平方差」という操作の特徴
$$ |a^2-b^2|=|a-b|\,|a+b| $$
を利用した設計になっています。
つまり、証明の本質は「36を力ずくで処理する」ことではありません。
何度も使える小さな部品を作り、それらを36個の中に埋め込む。
という発想です。
ここまで見ると、36という数字がかなり特殊に見えます。
実際、先行研究では24個と60個は還元可能でした。一方、12個は不可能で、36だけが残っていました。今回の論文SWは、その最後の穴を埋めました。
しかも結果をまとめると、答えは驚くほどきれいです。
$$ I_L(n)\text{ がすべての }n\text{ で0に還元可能} \iff 12\mid L\text{ かつ }L\ge24 $$
つまり、許される長さは
$$ 24,36,48,60,72,\ldots $$
です。
24と36が分かれば、あとは24個ブロックと36個ブロックを組み合わせることで、24以上の12の倍数を全部処理できます。論文もこの方法で完全分類の系を導いています。
この問題は、見た目だけなら「平方して引き算するゲーム」です。
しかし中を覗いてみると、
というアイデアが詰まっています。
印象的なのは、
「0を直接作る」のではなく、「同じ数を2つ作れば0になる」
という、まるでパズルに近い発想です。
「どういう部品を作れば、最後に同じものが2つ現れるのか?」
この視点で眺めると、36という突如湧いてきたような数から、きれいな構造が浮かび上がってくるんですね。