MathLabs

競技数学と問題解決

オリンピック数論

整除性、合同式、ディオファントスの技法を組み合わせた、数のパズルを解くための競技技法。

直観2は100!を何回割り切るか?

100!100!(すなわち 1×2×3×⋯×1001\times 2\times 3\times\cdots\times 100)は末尾に0がいくつ並ぶか?100個の数の積に隠れたすべての因数 1010 を数えるのは力任せでは絶望的に見えるが、一行の裏技がある:末尾の0はそれぞれ因数 55 と因数 22(22の方がはるかに豊富)のペアから来るので、55 が 100!100! を何回割り切るかを数えればよい。100100 以下の 55 の倍数はそれぞれ少なくとも1つの因数 55 を寄与し(2020 個)、2525 の倍数はそれぞれもう1つ寄与し(44 個)、125125 の倍数はさらにもう1つ寄与するはずだが(≤100\le 100 には存在しない)、20+4=2420+4=24 個の末尾の0が得られる。この数え方——階乗や巨大な積を割り切る素数のちょうどの冪を求める——はオリンピック数論への入口である:絶望的に見える場合の数え上げを、正確で機械的な規則と数行の算術に置き換える。

素数冪倍数の個数の幾何学的減衰を示す放物線のグラフ
法 m=13m = 13 の乗法構造:軌道や pp 進付値 νp(an−bn)\nu_p(a^n - b^n) を追跡することで、オリンピックの整除問題は合同算術に帰着される。

中高pp進付値とルジャンドルの公式

定義: pp進付値

素数 pp とゼロでない整数 nn について、**pp進付値** vp(n)v_p(n) とは pk∣np^k \mid n となる最大の指数 kk である。すなわち n=pvp(n)⋅mn = p^{v_p(n)} \cdot m(p∤mp \nmid m)。積については vp(ab)=vp(a)+vp(b)v_p(ab) = v_p(a)+v_p(b) により拡張され、乗法を加法に変える——ちょうど1つの素数に制限された対数のようなものである。

vp(n!)=∑i=1∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor

これがルジャンドルの公式である:各冪 pip^i について、{1,…,n}\{1,\dots,n\} の中に pip^i の倍数がいくつあるかを数え、すべての ii にわたって足し合わせることで、n!n! に隠れた各因数 pp を、それが生き残る各段階ごとにちょうど1回数える。pi>np^i > n となれば ⌊n/pi⌋=0\lfloor n/p^i\rfloor = 0 なので、実際には和は有限である。有用な言い換えとして vp(n!)=n−sp(n)p−1v_p(n!) = \frac{n - s_p(n)}{p-1} があり、ここで sp(n)s_p(n) は nn を pp 進法で書いたときの各桁の和である。

vp(n!)=n−sp(n)p−1v_p(n!) = \frac{n - s_p(n)}{p-1}
どの道具を使うか
道具最も適する場面
ルジャンドルの公式n!n! や二項係数を割り切る素数のちょうどの冪
指数持ち上げp∣a∓bp \mid a\mp b のときの vp(an±bn)v_p(a^n \pm b^n)
ヴィエタ・ジャンピング二次代入について対称なディオファントス方程式
nn を法とする合同解の排除、周期性の議論

大学完全な証明:ルジャンドルの公式と指数持ち上げ

素数 pp と正整数 nn について、vp(n!)=∑i=1∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor である。

なぜ正しいのか?

ルジャンドルの公式は、階乗や二項係数のちょうどの素数冪による整除性を計算する標準的な道具であり、クンマーの定理と組み合わせると、与えられた素数で割り切れる二項係数を正確に説明する。

証明

**ステップ1:vp(n!)v_p(n!) を各因数にわたる和として書く。** 定義により n!=1⋅2⋯nn! = 1\cdot 2\cdots n なので、vp(n!)=∑k=1nvp(k)v_p(n!) = \sum_{k=1}^{n} v_p(k)、すなわち 11 から nn までのすべての整数の pp進付値の和である。

**ステップ2:各 vp(k)v_p(k) を数え上げとして書き換える。** 各 kk について、vp(k)=∑i=1∞[pi∣k]v_p(k) = \sum_{i=1}^{\infty} [p^i \mid k](アイバーソン記法、真なら 11、偽なら 00)である、なぜなら kk がちょうど vp(k)v_p(k) 個の ii の値(すなわち i=1,…,vp(k)i=1,\dots,v_p(k))について pip^i で割り切れるからである。

ステップ3:和の順序を入れ替える。 代入すると vp(n!)=∑k=1n∑i=1∞[pi∣k]=∑i=1∞∑k=1n[pi∣k]v_p(n!) = \sum_{k=1}^n \sum_{i=1}^{\infty} [p^i \mid k] = \sum_{i=1}^{\infty} \sum_{k=1}^n [p^i \mid k]、(有限なので正当な)二重和を入れ替える。

**ステップ4:pip^i の倍数を直接数える。** 内側の和 ∑k=1n[pi∣k]\sum_{k=1}^n [p^i \mid k] は 11 から nn までの整数のうち pip^i の倍数がいくつあるかを数え、それはちょうど ⌊npi⌋\left\lfloor \frac{n}{p^i} \right\rfloor である(倍数は pi,2pi,…,⌊n/pi⌋⋅pip^i, 2p^i, \dots, \lfloor n/p^i\rfloor \cdot p^i)。

ステップ5:結論。 代入し戻すと vp(n!)=∑i=1∞⌊npi⌋v_p(n!) = \sum_{i=1}^{\infty} \left\lfloor \frac{n}{p^i} \right\rfloor となり、pi>np^i > n となれば ⌊n/pi⌋=0\lfloor n/p^i \rfloor = 0 なので有限であり、証明が完了する。

pp を奇素数とし、a,ba,b を p∣a−bp \mid a-b かつ p∤ap \nmid a、p∤bp \nmid b を満たす整数とする。このとき、すべての正整数 nn について:vp(an−bn)=vp(a−b)+vp(n)v_p(a^n - b^n) = v_p(a-b) + v_p(n)。

なぜ正しいのか?

LTEは高次のべきの差の整除性という難しい問題を、付値に関する単純な算術に変える。これは、an−bna^n-b^n のような式を割り切る素数の最大冪を求めたり、そのような式がある素数冪で決して(あるいは常に)割り切れないことを証明したりするオリンピック問題を解く最も速い方法の一つである。

証明

**ステップ1:乗法性により n=pn=p の場合に帰着させる。** n=pvp(n)⋅mn = p^{v_p(n)} \cdot m(p∤mp \nmid m)と書く。a,ba,b の代わりに am,bma^m, b^m に対して n=pn=p の場合(以下で証明)を繰り返し適用すると、vp(an−bn)=vp((am)pvp(n)−(bm)pvp(n))=vp(am−bm)+vp(n)v_p(a^n-b^n) = v_p((a^m)^{p^{v_p(n)}} - (b^m)^{p^{v_p(n)}}) = v_p(a^m-b^m) + v_p(n) が分かる。よって、p∤mp \nmid m のとき vp(am−bm)=vp(a−b)v_p(a^m - b^m) = v_p(a-b) を示し、かつ基底段階 vp(ap−bp)=vp(a−b)+1v_p(a^p-b^p) = v_p(a-b)+1 を示せば十分である。

ステップ2:因数分解を用いて基底段階を示す。 ap−bp=(a−b)(ap−1+ap−2b+⋯+bp−1)a^p - b^p = (a-b)(a^{p-1}+a^{p-2}b+\cdots+b^{p-1}) と分解する。第2因数 S=∑j=0p−1ap−1−jbjS = \sum_{j=0}^{p-1} a^{p-1-j}b^j が vp(S)=1v_p(S) = 1 であることを示さねばならない。

**ステップ3:p∣Sp \mid S を示す。** p∣a−bp \mid a-b より a≡b(modp)a \equiv b \pmod p なので、各項 ap−1−jbj≡bp−1−jbj=bp−1(modp)a^{p-1-j}b^j \equiv b^{p-1-j}b^j = b^{p-1} \pmod p。pp 個すべての項を足すと S≡p⋅bp−1≡0(modp)S \equiv p\cdot b^{p-1} \equiv 0 \pmod p(p∤bp \nmid b を用いる)、よって p∣Sp \mid S。

**ステップ4:p2∤Sp^2 \nmid S を示す。** 整数 tt を用いて a=b+pta = b + pt と書く(p∣a−bp\mid a-b より可能)。各項を展開すると ap−1−jbj=(b+pt)p−1−jbj≡bp−1−jbj+(p−1−j)pt bp−2−jbj(modp2)a^{p-1-j}b^j = (b+pt)^{p-1-j}b^j \equiv b^{p-1-j}b^j + (p-1-j)pt\, b^{p-2-j}b^j \pmod{p^2}(二項展開、p2p^2 以上の項を落とす)。j=0,…,p−1j=0,\dots,p-1 にわたって足すと、先頭項は前と同様 p bp−1p\,b^{p-1} に和し、補正項は pt bp−2∑j=0p−1(p−1−j)=pt bp−2⋅p(p−1)2pt\,b^{p-2}\sum_{j=0}^{p-1}(p-1-j) = pt\,b^{p-2}\cdot\frac{p(p-1)}{2} に和し、これは p2p^2 で割り切れる(pp が奇数なので p−12\frac{p-1}{2} は整数であり、この補正は p2⋅(integer)p^2\cdot(\text{integer}) となり ≡0(modp2)\equiv 0 \pmod{p^2})。よって S≡p bp−1(modp2)S \equiv p\,b^{p-1} \pmod{p^2} であり、p∤bp \nmid b なので p bp−1p\,b^{p-1} は pp で割り切れるが p2p^2 では割り切れず、vp(S)=1v_p(S)=1 が得られる。

ステップ5:結合する。 ステップ2–4より vp(ap−bp)=vp(a−b)+vp(S)=vp(a−b)+1v_p(a^p-b^p) = v_p(a-b) + v_p(S) = v_p(a-b)+1。ステップ1の帰着(p∤mp\nmid m のとき vp(am−bm)=vp(a−b)v_p(a^m-b^m)=v_p(a-b) であること、このときは S≡m bm−1≢0(modp)S \equiv m\,b^{m-1} \not\equiv 0 \pmod p となるので同様に証明できる)と合わせ、vp(n)v_p(n) に関する帰納法により、すべての正整数 nn について vp(an−bn)=vp(a−b)+vp(n)v_p(a^n-b^n) = v_p(a-b)+v_p(n) が得られる。

発展実世界での応用と具体例

pp進付値は競技における単なる興味の対象ではない:暗号理論では、大きな数の v2v_2 を計算することは高速なモジュラー冪乗やRSA関連構成の安全性マージンの分析における日常的な手順であり、計算機科学では、2進数の末尾の0ビットの個数を数えることはまさに v2(n)v_2(n) であり、ビット操作の技法、ハッシュテーブルの実装、Fenwick木で使われる古典的な「最下位の立っているビット」の技 n  &  (−n)n \;\&\; (-n) で使われる基本演算である。ヴィエタ・ジャンピングの背後にある技法——隠れた二次的対称性を用いて大きい解からより小さい解を生成する——は、フェルマーが x4+y4=z4x^4+y^4=z^4 に非自明な整数解が存在しないことを証明するために用いた無限降下法の特殊な場合であり、この方法は現在ディオファントス幾何学における現代的な証明の中心となっている。

例: v2v_2 による末尾のゼロビット

あるハッシュテーブルの実装は、正整数 n=1600n=1600 の2進表現における末尾のゼロビットの個数を求める必要がある。これはビット単位のトライにおいて nn がどのバケットレベルに属するかを計算するステップである。v2(1600)v_2(1600) を計算せよ。

解答

ステップ1:因数 22 を繰り返し取り出す:1600=2⋅800=22⋅400=23⋅200=24⋅100=25⋅50=26⋅251600 = 2\cdot 800 = 2^2\cdot 400 = 2^3\cdot 200 = 2^4\cdot 100 = 2^5\cdot 50 = 2^6\cdot 25。

ステップ2:2525 は奇数なので、これ以上因数 22 を取り出せない。よって 1600=26⋅251600 = 2^6\cdot 25(2525 は奇数)、v2(1600)=6v_2(1600)=6 となる。

ステップ3:2進表現と照合する:1600=1100100000021600 = 11001000000_2 であり、これは確かにちょうど 66 個の末尾ゼロビットを持ち、v2(1600)=6v_2(1600)=6 が直接ビットを数える方法と一致することを確認し、2つの方法(因数分解と末尾ビットの数え上げ)が同じ演算であることを示す。

例: IMO 1988 第6問におけるヴィエタ・ジャンピング

a,ba,b を正整数とし、ab+1ab+1 が a2+b2a^2+b^2 を割り切るとする。a2+b2ab+1\frac{a^2+b^2}{ab+1} が完全平方数であることを示せ(有名なIMO 1988年第6問、オリンピック史上最も難しい問題の一つとされる)。

解答

ステップ1:k=a2+b2ab+1k=\frac{a^2+b^2}{ab+1} とし、背理法により kk が完全平方数でない正整数であると仮定する。a2+b2ab+1=k\frac{a^2+b^2}{ab+1}=k を満たすすべての非負整数の組 (a,b)(a,b) の中から、a+ba+b が最小となるものを選び、一般性を失うことなく a≥b≥0a\ge b\ge 0 とする。

ステップ2:bb と kk を固定し、a2−kb⋅a+(b2−k)=0a^2 - kb\cdot a + (b^2-k) = 0(a2+b2=k(ab+1)a^2+b^2=k(ab+1) を整理したもの)を aa に関する二次方程式とみなす。これは根 aa を持つので、ヴィエタの公式によりもう一方の根は a′=kb−a=b2−kaa' = kb - a = \frac{b^2-k}{a} である。

ステップ3:a′a' が整数であること(a′=kb−aa'=kb-a から明らか)と a′≥0a' \ge 0 であることを示す:もし a′<0a'<0 なら a′2−kba′+(b2−k)≥a′2+k+(b2−k)>0a'^2 - kb a' + (b^2-k) \ge a'^2+k+(b^2-k) > 0 となり、a′a' が根であることに矛盾する(そこで二次式が 00 に等しく、a′<0a'<0 のとき −kba′-kba' を除くすべての項が非負となり式全体が真に正になるため——矛盾)、よって a′≥0a'\ge 0。

ステップ4:(a′,b)(a',b) がより小さい解であることを示し、矛盾を導く:a′=b2−kaa'=\frac{b^2-k}{a} かつ b<ab<a(a≥ba\ge b かつ a≠ba\ne b でなければ k=2k=2 となり完全平方数となって仮定に矛盾する、ただし a=b=0a=b=0 は正であることから除外され、a=ba=b の場合は別に扱われて k=2k=2 の否定を直接与える)なので、b<ab<a を用いて a′=b2−ka<b2a≤a2a=aa' = \frac{b^2-k}{a} < \frac{b^2}{a} \le \frac{a^2}{a} = a を得る、より直接には:a′a=b2−k<b2≤a2a'a = b^2-k < b^2 \le a^2 なので(a>0a>0 を用いて)a′<aa'<a となり、新しい組 (a′,b)(a',b) は a′+b<a+ba'+b < a+b という真に小さい和を持ちながら、依然として a′2+b2a′b+1=k\frac{a'^2+b^2}{a'b+1}=k を満たす(この二次関係は aa をもう一方の根に置き換えても値 kk が保たれるという意味で対称的である)——これは a+ba+b の最小性に矛盾する。

ステップ5:結論。ステップ4の矛盾は、そのような最小の反例が存在し得ないことを示しており、したがって kk が正整数であるときは常に実は完全平方数でなければならず、元の主張が証明される。

ルジャンドルの公式を用いると、v3(30!)v_3(30!) はいくつか?

指数持ち上げにより、素数 p=7p=7 で 7∣(12−5)7\mid (12-5) かつ 7∤127\nmid 12、7∤57\nmid 5 のとき、v7(127−57)v_7(12^7-5^7) はいくつか?

a2+b2ab+1=k\frac{a^2+b^2}{ab+1}=k に対するヴィエタ・ジャンピングにおいて、a≥ba\ge b を満たす解 (a,b)(a,b) が与えられたとき、aa に関する二次方程式のもう一方の根は a′=kb−aa'=kb-a である。a+ba+b の最小性から矛盾を導くために a′a' について示すべき鍵となる性質は何か?

abc予想が証明されれば、本トピックで論じたどの補題の背後にある整除性の直感を一般化することになるか?

参考文献

  1. Andrew Granville, Thomas J. Tucker (2002). It's As Easy As abc
  2. Titu Andreescu, Dorin Andrica, Zuming Feng (2007). 104 Number Theory Problems: From the Training of the USA IMO Team
  3. Titu Andreescu, Dorin Andrica, Ion Cucurezeanu (2010). An Introduction to Diophantine Equations: A Problem-Based Approach