コンテンツにスキップ

整除と素因数分解:互除法・中国剰余定理・オイラー関数

対象読者: 本テーマ第 1 章の素数と算術の基本定理を読んだ人。整数の割り算と剰余、集合と写像の基本的な言葉を知っていれば十分で、環論や群論の知識は仮定しません。

前提となる記事:素数の魅力と素数定理:無限性・一意分解から分布の法則へ

生 Markdown

二つの整数の「共通の約数のうち最大のもの」を、素因数分解をせずに素早く求めるにはどうすればよいでしょうか。また、「3 で割ると 2 余り、5 で割ると 3 余る数」のような条件を同時に満たす数は、いつ、どのくらいあるのでしょうか。この記事は、この二つの素朴な疑問に答える道具を順に作ります。読み終えると、最大公約数の計算とその回数の見積もり、連立する余りの条件の解き方、そして 1 から n までの数のうち n と共通の約数をもたないものの個数の求め方が分かります。

  • ユークリッドの互除法は、最大公約数を求めるだけでなく、ベズーの等式 gcd⁡(a,b)=ax+by\gcd(a,b)=ax+by の係数 x,yx,y も同時に与えます(拡張互除法)。割り算の回数は、小さい方の数の十進桁数の 5 倍以下です(ラメの定理。互除法が何回で終わるかの上限を与える定理です)。
  • 素因数分解の一意性を pp 進付値 vp(n)v_p(n)(nn が素数 pp で何回割り切れるかを表す数)の言葉で言い換えると、整除・最大公約数・最小公倍数がすべて指数の大小比較に翻訳されます。gcd⁡(a,b)⋅lcm(a,b)=ab\gcd(a,b)\cdot\mathrm{lcm}(a,b)=ab もその帰結です。
  • 中国剰余定理の一般形:連立合同式 x≡a (mod m)x\equiv a\ (\mathrm{mod}\ m), x≡b (mod n)x\equiv b\ (\mathrm{mod}\ n) が解をもつ条件は gcd⁡(m,n)∣a−b\gcd(m,n)\mid a-b で、解は lcm(m,n)\mathrm{lcm}(m,n) を法として一意です。法が互いに素なら、常に解けて一意に定まります。
  • 互いに素な法に分解すると、合同式の問題は素数べきを法とする問題に帰着します。Z/mnZ\mathbb{Z}/mn\mathbb{Z} と Z/mZ×Z/nZ\mathbb{Z}/m\mathbb{Z}\times\mathbb{Z}/n\mathbb{Z} の間の全単射がその仕組みです。
  • オイラー関数 φ(n)\varphi(n) は乗法的(互いに素な二数の積での値が、それぞれの値の積になること)で、φ(n)=n∏p∣n(1−1/p)\varphi(n)=n\prod_{p\mid n}(1-1/p)。さらに ∑d∣nφ(d)=n\sum_{d\mid n}\varphi(d)=n が成り立ちます。この恒等式は、次の記事までに原始根の存在証明に使われます。

1. 動機:二千三百年前のアルゴリズム

Section titled “1. 動機:二千三百年前のアルゴリズム”

ユークリッドの『原論』第 7 巻の冒頭にある、二つの数の最大公約数を求める手順は、現存する最古のアルゴリズムの一つだと言われます。大きい方の数を小さい方で割った余りで、大きい方を置き換える。これを余りが 00 になるまで繰り返す。それだけの手順で、素因数分解を一切せずに最大公約数が求まります。1010010^{100} のような数の素因数分解は現実的な時間では不可能と考えられていますが、互除法は数百回の割り算で終わります。

この記事は、整数論の最も基本的な四つの道具を整理します。互除法、素因数分解の一意性、中国剰余定理、オイラー関数です。これらは 素数と素数定理 で得た基本事項(除法の原理、ベズーの等式、算術の基本定理)の上に建ち、次の記事 合同式とフェルマーの小定理 や 原始根と平方剰余の相互法則 の下敷きになります。

記号。 Z\mathbb{Z} は整数全体、Z>0\mathbb{Z}_{>0} は正の整数全体です。整数 a,ba,b について a∣ba\mid b は「b=akb=ak となる整数 kk がある」ことを表します。gcd⁡(a,b)\gcd(a,b) は a,ba,b の最大公約数(定義 2.1[素数の魅力と素数定理])で、gcd⁡(a,b)=1\gcd(a,b)=1 のとき a,ba,b は互いに素といいます。この記事は次の二つの既出の事実を使います。

最小公倍数を、最小性だけでなく倍数の構造まで込めて定義し直します。

定義 2.1(最小公倍数)↗

正の整数 m,nm,n の最小公倍数 lcm(m,n)\mathrm{lcm}(m,n) とは、mm と nn の正の公倍数のうち最小のものをいう。

補題 2.2(ユークリッドの補題(一般形))✓

u,v,wu,v,w を整数とし、gcd⁡(u,v)=1\gcd(u,v)=1 とする。u∣vwu\mid vw ならば u∣wu\mid w である。

証明(補題 2.2)

ベズーの等式(補題 2.4[素数の魅力と素数定理])により 1=ux+vy1=ux+vy となる整数 x,yx,y が取れる。両辺に ww を掛けて w=u(wx)+(vw)yw=u(wx)+(vw)y。右辺の第 1 項は uu の倍数、第 2 項は仮定 u∣vwu\mid vw により uu の倍数なので、u∣wu\mid w。

素数 pp に対する形(補題 4.1[素数の魅力と素数定理])は、これで u=pu=p とした特別な場合です(p∤vp\nmid v なら gcd⁡(p,v)=1\gcd(p,v)=1)。次の合同式の記事の ユークリッドの補題 も同じ主張で、そこでは合同式の消去法則に使われます。

補題 2.3(互いに素な商)✓

m,nm,n を整数で少なくとも一方は 00 でないとし、g=gcd⁡(m,n)g=\gcd(m,n) とすると、gcd⁡(m/g, n/g)=1\gcd(m/g,\,n/g)=1 である。

証明(補題 2.3)

ベズーの等式により g=mx+nyg=mx+ny と書ける。両辺を gg で割って 1=(m/g)x+(n/g)y1=(m/g)x+(n/g)y。m/g,n/gm/g,n/g の正の公約数 cc は右辺を割り切り、c∣1c\mid1 なので c=1c=1。

命題 2.4(gcd と lcm の関係)✓

正の整数 m,nm,n について、g=gcd⁡(m,n)g=\gcd(m,n)、L=mn/gL=mn/g とおく。

  1. LL は整数で、mm と nn の公倍数である。
  2. mm と nn の公倍数はすべて LL の倍数である。特に lcm(m,n)=L\mathrm{lcm}(m,n)=L であり、gcd⁡(m,n)⋅lcm(m,n)=mn\gcd(m,n)\cdot\mathrm{lcm}(m,n)=mn。
証明(命題 2.4)

(1) L=m⋅(n/g)=n⋅(m/g)L=m\cdot(n/g)=n\cdot(m/g) なので、整数で、mm の倍数かつ nn の倍数。 (2) cc を公倍数とし、c=mc′c=mc' と書く。n∣mc′n\mid mc' より (n/g)∣(m/g)c′(n/g)\mid(m/g)c'。gcd⁡(n/g,m/g)=1\gcd(n/g,m/g)=1 なので(補題 2.3)、(n/g)∣c′(n/g)\mid c'(補題 2.2)。c′=(n/g)c′′c'=(n/g)c'' とおくと c=mc′=Lc′′c=mc'=Lc''。したがって最小の正の公倍数は LL。

定義 3.1(ユークリッドの互除法)↗

正の整数 a>ba>b に対し、r−1=ar_{-1}=a, r0=br_0=b とおき、ri>0r_i>0 である限り、除法の原理で

ri−1=qi ri+ri+1,0≤ri+1<ri(i=0,1,2,…)r_{i-1}=q_i\,r_i+r_{i+1},\qquad 0\le r_{i+1}<r_i\qquad(i=0,1,2,\ldots)

と商 qiq_i と余り ri+1r_{i+1} を定める。余りが初めて 00 になる、すなわち rn+1=0r_{n+1}=0 となる nn を段数といい(余りが 00 になる最後の割り算を含めて、割り算は n+1n+1 回行われる)、この手順をユークリッドの互除法という。

余りは真に減少する非負整数なので、必ず有限回で 00 になります(整列性)。

定理 3.2(互除法の正しさと拡張)✓

互除法の最後の非零の余り rnr_n は gcd⁡(a,b)\gcd(a,b) に等しい。さらに、整数列 si,tis_i,t_i を

s−1=1, t−1=0,s0=0, t0=1,si+1=si−1−qisi,ti+1=ti−1−qitis_{-1}=1,\ t_{-1}=0,\quad s_0=0,\ t_0=1,\qquad s_{i+1}=s_{i-1}-q_i s_i,\quad t_{i+1}=t_{i-1}-q_i t_i

で定めると、すべての ii について ri=a si+b tir_i=a\,s_i+b\,t_i が成り立つ。特に gcd⁡(a,b)=a sn+b tn\gcd(a,b)=a\,s_n+b\,t_n である。

証明(定理 3.2)

最後の余り =gcd⁡=\gcd。一般に a=bq+ra=bq+r のとき gcd⁡(a,b)=gcd⁡(b,r)\gcd(a,b)=\gcd(b,r) である:a,ba,b の公約数は r=a−bqr=a-bq を割り切り、b,rb,r の公約数は a=bq+ra=bq+r を割り切るので、公約数の集合が一致する。これを繰り返して gcd⁡(a,b)=gcd⁡(r0,r1)=⋯=gcd⁡(rn,rn+1)=gcd⁡(rn,0)=rn\gcd(a,b)=\gcd(r_0,r_1)=\cdots=\gcd(r_n,r_{n+1})=\gcd(r_n,0)=r_n。

係数。i=−1i=-1 では r−1=a=a⋅1+b⋅0r_{-1}=a=a\cdot1+b\cdot0、i=0i=0 では r0=b=a⋅0+b⋅1r_0=b=a\cdot0+b\cdot1 で正しい。i−1,ii-1,i で成り立つとすると、

ri+1=ri−1−qiri=(asi−1+bti−1)−qi(asi+bti)=a si+1+b ti+1.r_{i+1}=r_{i-1}-q_ir_i=(as_{i-1}+bt_{i-1})-q_i(as_i+bt_i)=a\,s_{i+1}+b\,t_{i+1}.

ベズーの等式の存在証明(最小元を取る)と違い、これは係数を構成する手順を与えます。

例 3.3(252 と 105)

a=252a=252, b=105b=105 とします。

252=2⋅105+42,105=2⋅42+21,42=2⋅21+0.252=2\cdot105+42,\qquad105=2\cdot42+21,\qquad42=2\cdot21+0.

n=2n=2(非零の余りは 42,2142,21)で、gcd⁡(252,105)=21\gcd(252,105)=21。係数は (q0,q1,q2)=(2,2,2)(q_0,q_1,q_2)=(2,2,2) から、s1=1−2⋅0=1s_1=1-2\cdot0=1, t1=0−2⋅1=−2t_1=0-2\cdot1=-2(確かに r1=42=252−2⋅105r_1=42=252-2\cdot105)、s2=0−2⋅1=−2s_2=0-2\cdot1=-2, t2=1−2⋅(−2)=5t_2=1-2\cdot(-2)=5。よって

21=252⋅(−2)+105⋅5=−504+525.21=252\cdot(-2)+105\cdot5=-504+525.

互除法は長方形の分割とも読めます。縦 105105、横 252252 の長方形から、できるだけ大きい正方形を切り出し続けると、最後に残る正方形の一辺が最大公約数 2121 です。

105 × 105105 × 10542422121
252 × 105 の長方形から、一辺 105 の正方形を 2 つ、残りの 42 × 105 から一辺 42 の正方形を 2 つ、残りの 42 × 21 から一辺 21 の正方形を 2 つ切り出す。最後の正方形の一辺が gcd。

互除法はどれだけ速いのでしょうか。割り算の回数を、フィボナッチ数 F1=F2=1F_1=F_2=1, Fk+2=Fk+1+FkF_{k+2}=F_{k+1}+F_k で評価できます。

定理 3.4(ラメの定理)✓

a>b≥1a>b\ge1 に対する互除法の段数を nn とすると、b≥Fn+2b\ge F_{n+2}(かつ a≥Fn+3a\ge F_{n+3})。したがって b<10db<10^d ならば n<5dn<5d、すなわち割り算の回数 n+1n+1 は 5d5d 以下である。

証明の方針:互除法が長く続くためには、余りがゆっくり減らなければなりません。ゆっくり減る最悪の場合を、末尾から逆にたどってフィボナッチ数で下から押さえます。後半は、フィボナッチ数が 5 つ進むごとに 10 倍を超えて大きくなること(k≥2k\ge2 で Fk+5>10FkF_{k+5}>10F_k)を使って、桁数との関係に直します。

証明(定理 3.4)

rn≥1r_n\ge1 で、rn∣rn−1r_n\mid r_{n-1} かつ rn−1>rnr_{n-1}>r_n なので rn−1≥2rn≥2r_{n-1}\ge2r_n\ge2。各 i≥0i\ge0 で qi≥1q_i\ge1 だから(ri−1>rir_{i-1}>r_i なので商は 00 にならない)ri−1=qiri+ri+1≥ri+ri+1r_{i-1}=q_ir_i+r_{i+1}\ge r_i+r_{i+1}。これを下から使う。rn≥1=F2r_n\ge1=F_2, rn−1≥2=F3r_{n-1}\ge2=F_3, rn−2≥rn−1+rn≥F3+F2=F4r_{n-2}\ge r_{n-1}+r_n\ge F_3+F_2=F_4, ……と帰納的に rn−j≥Fj+2r_{n-j}\ge F_{j+2}。j=nj=n で b=r0≥Fn+2b=r_0\ge F_{n+2}、j=n+1j=n+1 で a=r−1≥Fn+3a=r_{-1}\ge F_{n+3}。

後半。まず任意の k≥2k\ge2 で Fk+5>10FkF_{k+5}>10F_k を示す。Fk+5=5Fk+1+3FkF_{k+5}=5F_{k+1}+3F_k(展開すれば確かめられる)で、k≥2k\ge2 なら Fk+1≥32FkF_{k+1}\ge\tfrac32F_k(k=2k=2 は F3=2F2F_3=2F_2。以降は Fk+1≤2FkF_{k+1}\le2F_k より Fk+2=Fk+1+Fk≥Fk+1+12Fk+1F_{k+2}=F_{k+1}+F_k\ge F_{k+1}+\tfrac12F_{k+1})だから Fk+5≥152Fk+3Fk=10.5FkF_{k+5}\ge\tfrac{15}{2}F_k+3F_k=10.5F_k。ここから帰納法で F5d+2>10dF_{5d+2}>10^d(d=1d=1: F7=13>10F_7=13>10)。b<10db<10^d とすると Fn+2≤b<10d<F5d+2F_{n+2}\le b<10^d<F_{5d+2}。FkF_k は広義単調増加なので n+2<5d+2n+2<5d+2、すなわち n<5dn<5d。

等号に近い最悪の入力は、隣り合うフィボナッチ数 (Fn+3,Fn+2)(F_{n+3},F_{n+2}) です。このとき最後の商を除いて商はすべて 11 で、割り算の回数が最大になります。

ベズーの等式の最も直接的な応用です。

命題 4.1(一次不定方程式)✓

a,ba,b を共に 00 でない整数、cc を整数、g=gcd⁡(a,b)g=\gcd(a,b) とする。方程式 ax+by=cax+by=c が整数解をもつための必要十分条件は g∣cg\mid c である。このとき一つの解 (x0,y0)(x_0,y_0) を用いて、解全体は

(x,y)=(x0+bgk, y0−agk)(k∈Z)(x,y)=\Bigl(x_0+\frac{b}{g}k,\ y_0-\frac{a}{g}k\Bigr)\qquad(k\in\mathbb{Z})

で尽くされる。

証明(命題 4.1)

解があれば g∣ag\mid a, g∣bg\mid b より g∣ax+by=cg\mid ax+by=c。逆に g∣cg\mid c とし、c=gc′c=gc' とする。ベズーの等式 g=au+bvg=au+bv から (x0,y0)=(uc′,vc′)(x_0,y_0)=(uc',vc') が解になる。

(x,y)(x,y) を別の解とすると a(x−x0)=−b(y−y0)a(x-x_0)=-b(y-y_0)。gg で割って (a/g)(x−x0)=−(b/g)(y−y0)(a/g)(x-x_0)=-(b/g)(y-y_0)。gcd⁡(a/g,b/g)=1\gcd(a/g,b/g)=1 なので(補題 2.3)、(b/g)∣(a/g)(x−x0)(b/g)\mid(a/g)(x-x_0) に 補題 2.2 を使って (b/g)∣(x−x0)(b/g)\mid(x-x_0)。x−x0=(b/g)kx-x_0=(b/g)k と書けば、y−y0=−(a/g)ky-y_0=-(a/g)k が従う。逆にこの形の組が解であることは代入で確かめられる。

例 4.2(252x + 105y = 63)

g=21g=21, 63=21⋅363=21\cdot3 なので解がある。例 3.3 の 21=252⋅(−2)+105⋅521=252\cdot(-2)+105\cdot5 を 33 倍して (x0,y0)=(−6,15)(x_0,y_0)=(-6,15)。一般解は (x,y)=(−6+5k, 15−12k)(x,y)=(-6+5k,\ 15-12k)(b/g=5b/g=5, a/g=12a/g=12)。k=1k=1 で (−1,3)(-1,3):−252+315=63-252+315=63 ✓。

素数と素数定理 で証明した算術の基本定理は、「11 より大きい整数は素数の積に書け、その表し方は順序を除いて一意」というものでした(定理 4.2[素数の魅力と素数定理])。ここでは、一意性を計算に使いやすい形に言い換えます。

定義 5.1(素数 p に関する付値)↗

素数 pp と正の整数 nn について、pe∣np^e\mid n を満たす最大の整数 e≥0e\ge0 を vp(n)v_p(n) と書く。

定理 5.2(素因数分解の指数による表示)✓

正の整数 nn について、vp(n)v_p(n) は有限で、vp(n)≠0v_p(n)\ne0 となる素数 pp は有限個であり、

n=∏ppvp(n)n=\prod_{p}p^{v_p(n)}

が成り立つ。さらに、素数べきの積として n=∏ppepn=\prod_pp^{e_p}(ep≥0e_p\ge0 で有限個を除いて 00)と書く方法は、指数の組 (ep)p=(vp(n))p(e_p)_p=(v_p(n))_p のただ一つに限る。

証明の中の「空積」は、一つも因数がない積のことで、値は 11 と約束します。したがって n=1n=1 は、どの素数の指数も 00 の表示に当たります。

証明(定理 5.2)

n=1n=1 は空積。素数での指数の有限性は、pe∣np^e\mid n なら pe≤np^e\le n より e<ne<n から従う。まず、n=∏ppepn=\prod_pp^{e_p} という任意の表示(ep≥0e_p\ge0、有限個を除いて 00)について ep=vp(n)e_p=v_p(n) を示す。pep∣np^{e_p}\mid n は明らか。pep+1∣np^{e_p+1}\mid n とすると、n=pep∏q≠pqeqn=p^{e_p}\prod_{q\ne p}q^{e_q} から p∣∏q≠pqeqp\mid\prod_{q\ne p}q^{e_q}。ユークリッドの補題(補題 4.1[素数の魅力と素数定理])を繰り返すと、pp はある素数 q≠pq\ne p を割り切るが、素数 qq の正の約数は 11 と qq だけなので p=qp=q となり矛盾する。よって ep=vp(n)e_p=v_p(n)。

一方、n>1n>1 には 定理 4.2[素数の魅力と素数定理] により素数の積としての表示が存在する。同じ素数をまとめれば上の形の表示になるので、n=∏ppvp(n)n=\prod_pp^{v_p(n)} が成り立ち、vp(n)≠0v_p(n)\ne0 となる pp は表示に現れる素数に限るから有限個である。表示が (vp(n))p(v_p(n))_p に限ることは、前段で示したとおり。

付値は積を和に変えます。

命題 5.3(付値の規則と gcd・lcm)✓

正の整数 a,ba,b と素数 pp について次が成り立つ。

  1. vp(ab)=vp(a)+vp(b)v_p(ab)=v_p(a)+v_p(b)。
  2. a∣b  ⟺  a\mid b\iff すべての素数 pp で vp(a)≤vp(b)v_p(a)\le v_p(b)。
  3. vp(gcd⁡(a,b))=min⁡(vp(a),vp(b))v_p(\gcd(a,b))=\min(v_p(a),v_p(b))、vp(lcm(a,b))=max⁡(vp(a),vp(b))v_p(\mathrm{lcm}(a,b))=\max(v_p(a),v_p(b))。
  4. 特に gcd⁡(a,b) lcm(a,b)=ab\gcd(a,b)\,\mathrm{lcm}(a,b)=ab(命題 2.4 の別証明)。
証明(命題 5.3)

(1) a=∏pvp(a)a=\prod p^{v_p(a)}, b=∏pvp(b)b=\prod p^{v_p(b)} の積は ∏pvp(a)+vp(b)\prod p^{v_p(a)+v_p(b)} で、定理 5.2 の一意性により vp(ab)=vp(a)+vp(b)v_p(ab)=v_p(a)+v_p(b)。 (2) (⇒\Rightarrow) b=akb=ak なら (1) より vp(b)=vp(a)+vp(k)≥vp(a)v_p(b)=v_p(a)+v_p(k)\ge v_p(a)。(⇐\Leftarrow) k=∏pvp(b)−vp(a)k=\prod p^{v_p(b)-v_p(a)} は正の整数で b=akb=ak。 (3) cc が a,ba,b の公約数であることは、(2) により「すべての pp で vp(c)≤min⁡(vp(a),vp(b))v_p(c)\le\min(v_p(a),v_p(b))」と同値。∏pmin⁡\prod p^{\min} が最大の公約数。lcm も同様に max⁡\max。 (4) min⁡(x,y)+max⁡(x,y)=x+y\min(x,y)+\max(x,y)=x+y。

例 5.4(付値による gcd と lcm)

a=252=22⋅32⋅7a=252=2^2\cdot3^2\cdot7, b=105=3⋅5⋅7b=105=3\cdot5\cdot7 のとき、素数 2,3,5,72,3,5,7 での指数は a:(2,2,0,1)a:(2,2,0,1), b:(0,1,1,1)b:(0,1,1,1)。min は (0,1,0,1)(0,1,0,1) で gcd⁡=3⋅7=21\gcd=3\cdot7=21、max は (2,2,1,1)(2,2,1,1) で lcm=4⋅9⋅5⋅7=1260\mathrm{lcm}=4\cdot9\cdot5\cdot7=1260。確かに 21⋅1260=26460=252⋅10521\cdot1260=26460=252\cdot105。

命題 5.5(約数の個数)✓

n=∏i=1kpiein=\prod_{i=1}^kp_i^{e_i} ならば、nn の正の約数の個数は ∏i=1k(ei+1)\prod_{i=1}^k(e_i+1) である。

証明(命題 5.5)

命題 5.3(2) により、正の約数 dd は 0≤vpi(d)≤ei0\le v_{p_i}(d)\le e_i と、その他の素数での指数が 00 であること(d∣nd\mid n なので dd の素因数は pip_i に限る)で決まり、定理 5.2 により指数の組と約数が一対一に対応する。各 ii の選び方は ei+1e_i+1 通り。

整数 a,ba,b と正の整数 nn について、n∣a−bn\mid a-b を a≡b(modn)a\equiv b\pmod n と書きます(合同の基本は 合同式とフェルマーの小定理 で詳しく扱います)。ここでは定義だけを使います。

定理 6.1(中国剰余定理(一般形))✓

m,nm,n を正の整数、g=gcd⁡(m,n)g=\gcd(m,n) とし、a,ba,b を整数とする。連立合同式

x≡a(modm),x≡b(modn)x\equiv a\pmod m,\qquad x\equiv b\pmod n

が整数解をもつための必要十分条件は g∣a−bg\mid a-b である。このとき、解の全体は lcm(m,n)\mathrm{lcm}(m,n) を法とするただ一つの剰余類をなす。特に g=1g=1 なら、任意の a,ba,b に対して解が存在し、mnmn を法として一意である。

証明の方針:解は x=a+(m の倍数)x=a+(m\text{ の倍数}) の形で探します。x≡a(modm)x\equiv a\pmod m はこれで自動的に満たされるので、残る条件 x≡b(modn)x\equiv b\pmod n を満たすよう倍数の部分を調整します。ここで g=um+vng=um+vn という式が、その調整に使えます。なお、解の全体が一つの剰余類(lcm(m,n)\mathrm{lcm}(m,n) で割った余りが等しい整数の集まり)になることも示します。

証明(定理 6.1)

必要性。解 xx があれば m∣x−am\mid x-a, n∣x−bn\mid x-b で、g∣mg\mid m, g∣ng\mid n だから g∣x−ag\mid x-a, g∣x−bg\mid x-b。差をとって g∣a−bg\mid a-b。

十分性。g∣b−ag\mid b-a とし、b−a=gkb-a=gk と書く。ベズーの等式 g=um+vng=um+vn をとり、x=a+m u kx=a+m\,u\,k とおく。x≡a(modm)x\equiv a\pmod m は明らか。さらに

x−b=(a−b)+muk=−gk+muk=k(mu−g)=−k vnx-b=(a-b)+muk=-gk+muk=k(mu-g)=-k\,vn

で、nn の倍数。よって x≡b(modn)x\equiv b\pmod n。

一意性。x,x′x,x' を二つの解とすると m∣x−x′m\mid x-x' かつ n∣x−x′n\mid x-x' なので、命題 2.4 により lcm(m,n)∣x−x′\mathrm{lcm}(m,n)\mid x-x'。逆に xx が解で x′≡x(modlcm(m,n))x'\equiv x\pmod{\mathrm{lcm}(m,n)} なら x′x' も解。

例 6.2(法が互いに素でない場合)

x≡2(mod12)x\equiv2\pmod{12}, x≡8(mod18)x\equiv8\pmod{18}。gcd⁡(12,18)=6\gcd(12,18)=6 で 8−2=68-2=6 は 66 で割り切れるので解がある。lcm=36\mathrm{lcm}=36。x≡2(mod12)x\equiv2\pmod{12} の候補 2,14,262,14,26 のうち、1818 で割った余りが 88 なのは x=26x=26 (26=18+826=18+8)。解は x≡26(mod36)x\equiv26\pmod{36}。一方 x≡1(mod12)x\equiv1\pmod{12}, x≡2(mod18)x\equiv2\pmod{18} は gcd⁡=6∤1\gcd=6\nmid1 なので解がない:xx は偶数であるはずなのに x≡1(mod12)x\equiv1\pmod{12} は奇数を要求する。

系 6.3(互いに素な法の連立合同式)✓

m1,…,mkm_1,\ldots,m_k を、どの二つも互いに素な正の整数、M=m1⋯mkM=m_1\cdots m_k とする。任意の整数 a1,…,aka_1,\ldots,a_k に対して、連立合同式 x≡ai(modmi)x\equiv a_i\pmod{m_i}(i=1,…,ki=1,\ldots,k)は MM を法としてただ一つの解をもつ。解は

x≡∑i=1kai Mi yi(modM),Mi=Mmi,Miyi≡1(modmi)x\equiv\sum_{i=1}^ka_i\,M_i\,y_i\pmod M,\qquad M_i=\frac{M}{m_i},\quad M_iy_i\equiv1\pmod{m_i}

で与えられる。

証明(系 6.3)

gcd⁡(Mi,mi)=1\gcd(M_i,m_i)=1 である:素数 pp が mim_i と Mi=∏j≠imjM_i=\prod_{j\ne i}m_j を割り切るとすると、ユークリッドの補題によりある mjm_j (j≠ij\ne i) を割り切り、gcd⁡(mi,mj)=1\gcd(m_i,m_j)=1 に反する。したがってベズーの等式 1=Mix+miz1=M_ix+m_iz から yi=xy_i=x が存在する。x0=∑iaiMiyix_0=\sum_ia_iM_iy_i とおくと、j≠ij\ne i なら mj∣Mim_j\mid M_i なので aiMiyi≡0(modmj)a_iM_iy_i\equiv0\pmod{m_j}、よって x0≡ajMjyj≡aj(modmj)x_0\equiv a_jM_jy_j\equiv a_j\pmod{m_j}。解の存在が示せた。一意性:二つの解の差はすべての mim_i で割り切れ、互いに素な数の公倍数なので、命題 2.4 を繰り返して MM で割り切れる(互いに素なら lcm\mathrm{lcm} は積)。

例 6.4(孫子算経の問題)

「33 で割ると 22 余り、55 で割ると 33 余り、77 で割ると 22 余る数は何か」(M=105M=105)。M1=35M_1=35, M2=21M_2=21, M3=15M_3=15。35y1≡1 (3)35y_1\equiv1\ (3) から y1=2y_1=2(70=69+170=69+1)、21y2≡1 (5)21y_2\equiv1\ (5) から y2=1y_2=1、15y3≡1 (7)15y_3\equiv1\ (7) から y3=1y_3=1。x≡2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233≡233−210=23(mod105)x\equiv2\cdot35\cdot2+3\cdot21\cdot1+2\cdot15\cdot1=140+63+30=233\equiv233-210=23\pmod{105}。検算:23=3⋅7+2=5⋅4+3=7⋅3+223=3\cdot7+2=5\cdot4+3=7\cdot3+2 ✓。

中国剰余定理の最も重要な使い方は、「法を互いに素な因子に分けて別々に解き、あとで貼り合わせる」ことです。

系 6.5(剰余の分解)✓

m,nm,n を互いに素な正の整数とする。写像

Θ:{0,1,…,mn−1}⟶{0,…,m−1}×{0,…,n−1},x⟼(x mod m, x mod n)\Theta:\{0,1,\ldots,mn-1\}\longrightarrow\{0,\ldots,m-1\}\times\{0,\ldots,n-1\},\quad x\longmapsto(x\bmod m,\ x\bmod n)

は全単射である。さらに Θ(x+y)=Θ(x)⊕Θ(y)\Theta(x+y)=\Theta(x)\oplus\Theta(y), Θ(xy)=Θ(x)⊙Θ(y)\Theta(xy)=\Theta(x)\odot\Theta(y)(成分ごとに m,nm,n を法とする和・積)が成り立つ。

証明(系 6.5)

全射性は 定理 6.1 の存在(g=1g=1)、単射性は一意性(二つの xx が同じ像をもてば mnmn を法として合同で、範囲が mnmn 個の連続する整数なので等しい)。和と積についての性質は、剰余を取る操作が和と積と両立すること(a≡a′,b≡b′a\equiv a',b\equiv b' ならば a+b≡a′+b′a+b\equiv a'+b', ab≡a′b′ab\equiv a'b')から従う。

定理の中の ⊕\oplus, ⊙\odot は、第 1 成分は mm を法として、第 2 成分は nn を法として、それぞれ足す・掛ける操作を表します。つまり、mnmn を法とする計算は、mm を法とする計算と nn を法とする計算に分けて行えます。

例えば m=3m=3, n=5n=5 のとき、00 から 1414 までの 15 個の数は、33 で割った余りと 55 で割った余りの組によって、次の表の 15 個の升目に重なりなくちょうど一つずつ入ります。

5 で割った余り012343 で割った余り 0余り 1余り 206123910171345112814
m = 3, n = 5 のとき、0 から 14 の各数を (3 で割った余り, 5 で割った余り) の升目に置いた表。15 個の数が 15 個の升目を過不足なく埋める。

これを環の言葉で述べると、Z/mnZ≅Z/mZ×Z/nZ\mathbb{Z}/mn\mathbb{Z}\cong\mathbb{Z}/m\mathbb{Z}\times\mathbb{Z}/n\mathbb{Z}(環同型)です(定理 4.8[合同式とフェルマーの小定理] と 演習 8.2[イデアルと剰余環] も参照)。

命題 6.6(合同方程式の解の個数の乗法性)✓

ff を整数係数の多項式、m,nm,n を互いに素な正の整数とし、N(k)N(k) を合同方程式 f(x)≡0(modk)f(x)\equiv0\pmod k の {0,…,k−1}\{0,\ldots,k-1\} における解の個数とする。このとき N(mn)=N(m)N(n)N(mn)=N(m)N(n)。

証明(命題 6.6)

f(x)≡0(modmn)f(x)\equiv0\pmod{mn} は、m∣f(x)m\mid f(x) かつ n∣f(x)n\mid f(x)(互いに素なので 命題 2.4 より同値)。ff の整数係数性から f(x) mod mf(x)\bmod m は x mod mx\bmod m だけで決まる。系 6.5 により、xx と (x mod m,x mod n)(x\bmod m,x\bmod n) は一対一に対応し、xx が解であることは x mod mx\bmod m が  mod  m\bmod\ m の解かつ x mod nx\bmod n が  mod  n\bmod\ n の解であることと同値。解の個数は N(m)⋅N(n)N(m)\cdot N(n)。

例 6.7(x² ≡ 1 (mod 15))

N(3)=2N(3)=2(x≡±1x\equiv\pm1)、N(5)=2N(5)=2(x≡±1x\equiv\pm1)なので N(15)=4N(15)=4。四通りの組 (x mod 3,x mod 5)=(±1,±1)(x\bmod3,x\bmod5)=(\pm1,\pm1) を貼り合わせて、x=1,4,11,14x=1,4,11,14。確かめると 42=164^2=16, 112=121=8⋅15+111^2=121=8\cdot15+1, 142=196=13⋅15+114^2=196=13\cdot15+1。素数でない法では、x2≡1x^2\equiv1 の解が ±1\pm1 だけとは限りません。

定義 7.1(オイラー関数)↗

正の整数 nn に対し、φ(n)=#{ k∈{1,…,n}∣gcd⁡(k,n)=1 }\varphi(n)=\#\{\,k\in\{1,\ldots,n\}\mid\gcd(k,n)=1\,\} をオイラー関数という。

φ(1)=1\varphi(1)=1, φ(p)=p−1\varphi(p)=p-1(素数 pp), φ(12)=4\varphi(12)=4(1,5,7,111,5,7,11)。この関数は Z/nZ\mathbb{Z}/n\mathbb{Z} の可逆元の個数でもあります(定義 4.6[合同式とフェルマーの小定理])。

補題 7.2(積と互いに素)✓

m,nm,n を正の整数、xx を整数とすると、gcd⁡(x,mn)=1  ⟺  gcd⁡(x,m)=1\gcd(x,mn)=1\iff\gcd(x,m)=1 かつ gcd⁡(x,n)=1\gcd(x,n)=1。また gcd⁡(x,n)=gcd⁡(x mod n, n)\gcd(x,n)=\gcd(x\bmod n,\,n) である。

証明(補題 7.2)

gcd⁡(x,mn)>1\gcd(x,mn)>1 とすると、素数 pp が xx と mnmn を割り切る。ユークリッドの補題で p∣mp\mid m または p∣np\mid n となり、gcd⁡(x,m)>1\gcd(x,m)>1 または gcd⁡(x,n)>1\gcd(x,n)>1。逆は明らか。後半は、x=nq+rx=nq+r のとき xx と nn の公約数の集合が rr と nn の公約数の集合に一致すること(定理 3.2 の証明の最初の段落)による。

定理 7.3(オイラー関数の乗法性と公式)✓

  1. m,nm,n が互いに素ならば φ(mn)=φ(m)φ(n)\varphi(mn)=\varphi(m)\varphi(n)。
  2. 素数 pp と k≥1k\ge1 について φ(pk)=pk−pk−1\varphi(p^k)=p^k-p^{k-1}。
  3. n=∏i=1kpiein=\prod_{i=1}^kp_i^{e_i}(pip_i は相異なる素数、ei≥1e_i\ge1)ならば φ(n)=∏i=1kpiei−1(pi−1)=n∏i=1k(1−1pi)\varphi(n)=\prod_{i=1}^kp_i^{e_i-1}(p_i-1)=n\prod_{i=1}^k\Bigl(1-\dfrac1{p_i}\Bigr)。
証明(定理 7.3)

(1) 系 6.5 の Θ\Theta を考える。x∈{0,…,mn−1}x\in\{0,\ldots,mn-1\} について、補題 7.2 により gcd⁡(x,mn)=1  ⟺  gcd⁡(x mod m,m)=1\gcd(x,mn)=1\iff\gcd(x\bmod m,m)=1 かつ gcd⁡(x mod n,n)=1\gcd(x\bmod n,n)=1。つまり Θ\Theta は gcd⁡(x,mn)=1\gcd(x,mn)=1 を満たす xx の集合を、{u∣gcd⁡(u,m)=1}×{v∣gcd⁡(v,n)=1}\{u\mid\gcd(u,m)=1\}\times\{v\mid\gcd(v,n)=1\} へ全単射で写す({0,…,mn−1}\{0,\ldots,mn-1\} と {1,…,mn}\{1,\ldots,mn\} は 0↔mn0\leftrightarrow mn を除いて同じで、gcd⁡(0,mn)=mn>1\gcd(0,mn)=mn>1, gcd⁡(mn,mn)>1\gcd(mn,mn)>1 なので数え方に影響しない。m=n=1m=n=1 のときは自明)。個数を比べて φ(mn)=φ(m)φ(n)\varphi(mn)=\varphi(m)\varphi(n)。 (2) 1,…,pk1,\ldots,p^k のうち pkp^k と互いに素でないものは pp の倍数で、その個数は pk−1p^{k-1}。 (3) (1)(2) と 定理 5.2 から従う(互いに素な素数べきへの分解を使い、kk に関する帰納法)。piei−1(pi−1)=piei(1−1/pi)p_i^{e_i-1}(p_i-1)=p_i^{e_i}(1-1/p_i)。

例 7.4(φ の計算)

φ(360)\varphi(360):360=23⋅32⋅5360=2^3\cdot3^2\cdot5 なので 360⋅12⋅23⋅45=96360\cdot\frac12\cdot\frac23\cdot\frac45=96。φ(1001)\varphi(1001):1001=7⋅11⋅131001=7\cdot11\cdot13 で 6⋅10⋅12=7206\cdot10\cdot12=720。

定理 7.5(約数についての和)✓

正の整数 nn について ∑d∣nφ(d)=n\displaystyle\sum_{d\mid n}\varphi(d)=n(和は nn の正の約数 dd 全体)。

証明(定理 7.5)

{1,…,n}\{1,\ldots,n\} を、gcd⁡(k,n)\gcd(k,n) の値で分類する。gcd⁡(k,n)\gcd(k,n) は nn の約数だから、d∣nd\mid n ごとに Sd={k∈{1,…,n}∣gcd⁡(k,n)=n/d}S_d=\{k\in\{1,\ldots,n\}\mid\gcd(k,n)=n/d\} とおくと、SdS_d (d∣nd\mid n) は {1,…,n}\{1,\ldots,n\} の分割になる。k∈Sdk\in S_d は k=(n/d)jk=(n/d)j (1≤j≤d1\le j\le d) と書け、gcd⁡(k,n)=(n/d)gcd⁡(j,d)\gcd(k,n)=(n/d)\gcd(j,d) だから、条件 gcd⁡(k,n)=n/d\gcd(k,n)=n/d は gcd⁡(j,d)=1\gcd(j,d)=1 と同値。よって k↦jk\mapsto j は SdS_d から {j∈{1,…,d}∣gcd⁡(j,d)=1}\{j\in\{1,\ldots,d\}\mid\gcd(j,d)=1\} への全単射で、∣Sd∣=φ(d)|S_d|=\varphi(d)。両辺の個数を比べて n=∑d∣n∣Sd∣=∑d∣nφ(d)n=\sum_{d\mid n}|S_d|=\sum_{d\mid n}\varphi(d)。

例 7.6(n = 12 での確認)

1212 の約数は 1,2,3,4,6,121,2,3,4,6,12 で φ=1,1,2,2,2,4\varphi=1,1,2,2,2,4。和は 1212 ✓。S12={1,5,7,11}S_{12}=\{1,5,7,11\}(gcd⁡=1\gcd=1)、S6={2,10}S_6=\{2,10\}(gcd⁡=2\gcd=2)、S4={3,9}S_4=\{3,9\}、S3={4,8}S_3=\{4,8\}、S2={6}S_2=\{6\}、S1={12}S_1=\{12\}。

注意 7.7(オイラーの定理への接続)

gcd⁡(a,n)=1\gcd(a,n)=1 なら aφ(n)≡1(modn)a^{\varphi(n)}\equiv1\pmod n(定理 5.3[合同式とフェルマーの小定理])。この定理の証明は、Z/nZ\mathbb{Z}/n\mathbb{Z} の可逆元が φ(n)\varphi(n) 個あることとラグランジュの定理に基づいています。定理 7.5 は次々の記事で、位数 dd の元の個数を数えるのに使われます。

演習 8.1易

gcd⁡(1071,462)\gcd(1071,462) を互除法で求め、1071x+462y=gcd⁡(1071,462)1071x+462y=\gcd(1071,462) の整数解 (x,y)(x,y) を一組求めよ。

解答

1071=2⋅462+1471071=2\cdot462+147, 462=3⋅147+21462=3\cdot147+21, 147=7⋅21+0147=7\cdot21+0。gcd⁡=21\gcd=21。逆にたどって 21=462−3⋅147=462−3(1071−2⋅462)=7⋅462−3⋅107121=462-3\cdot147=462-3(1071-2\cdot462)=7\cdot462-3\cdot1071。よって (x,y)=(−3,7)(x,y)=(-3,7)(確認:−3213+3234=21-3213+3234=21)。

演習 8.2標準

連立合同式 x≡1(mod4)x\equiv1\pmod 4, x≡2(mod9)x\equiv2\pmod 9, x≡3(mod25)x\equiv3\pmod{25} を解け( mod  900\bmod\ 900)。

解答

法 4,9,254,9,25 はどの二つも互いに素で M=900M=900。M1=225M_1=225, M2=100M_2=100, M3=36M_3=36。225y1≡1 (4)225y_1\equiv1\ (4):225≡1225\equiv1 なので y1=1y_1=1。100y2≡1 (9)100y_2\equiv1\ (9):100≡1100\equiv1 なので y2=1y_2=1。36y3≡1 (25)36y_3\equiv1\ (25):36≡1136\equiv11, 11⋅16=176=7⋅25+111\cdot16=176=7\cdot25+1 なので y3=16y_3=16。x≡1⋅225⋅1+2⋅100⋅1+3⋅36⋅16=225+200+1728=2153≡2153−1800=353(mod900)x\equiv1\cdot225\cdot1+2\cdot100\cdot1+3\cdot36\cdot16=225+200+1728=2153\equiv2153-1800=353\pmod{900}。検算:353=4⋅88+1353=4\cdot88+1, 353=9⋅39+2353=9\cdot39+2, 353=25⋅14+3353=25\cdot14+3 ✓。

演習 8.3標準

φ(n)=12\varphi(n)=12 を満たす正の整数 nn をすべて求めよ。

解答

素数 p∣np\mid n について、φ(n)\varphi(n) の素因数分解表示の因子 pe−1(p−1)p^{e-1}(p-1) が φ(n)=12\varphi(n)=12 を割る(定理 7.3 の積の各因子は正の整数)。よって p−1∣12p-1\mid12 から p∈{2,3,5,7,13}p\in\{2,3,5,7,13\}、pe−1∣12p^{e-1}\mid12 から指数は 2a2^a (a≤3a\le3)、3b3^b (b≤2b\le2)、5,7,135,7,13 は 11 乗まで。互いに素な部分の φ\varphi の積が 1212 になる組を探す。値は φ(2a)∈{1,1,2,4}\varphi(2^a)\in\{1,1,2,4\}(a=0,1,2,3a=0,1,2,3)、φ(3b)∈{1,2,6}\varphi(3^b)\in\{1,2,6\}(b=0,1,2b=0,1,2)、φ(5)=4\varphi(5)=4、φ(7)=6\varphi(7)=6、φ(13)=12\varphi(13)=12。

  • 13∣n13\mid n のとき:他の部分の φ\varphi の積は 11。a∈{0,1}a\in\{0,1\}, b=0b=0 で n=13,26n=13,26。
  • 7∣n7\mid n, 13∤n13\nmid n のとき:他の部分の積は 22。5∣n5\mid n なら因子 44 が入って不可。φ(2a)φ(3b)=2\varphi(2^a)\varphi(3^b)=2 を解くと (φ(2a),φ(3b))=(1,2)(\varphi(2^a),\varphi(3^b))=(1,2) で a∈{0,1}a\in\{0,1\}, b=1b=1、または (2,1)(2,1) で a=2a=2, b=0b=0。n=7⋅3=21n=7\cdot3=21, 7⋅6=427\cdot6=42, 7⋅4=287\cdot4=28。
  • 7,13∤n7,13\nmid n のとき:5∣n5\mid n なら残りの積は 33 だが、{1,2,4}×{1,2,6}\{1,2,4\}\times\{1,2,6\} の積に 33 はない。5∤n5\nmid n なら φ(2a)φ(3b)=12\varphi(2^a)\varphi(3^b)=12 で、解は (2,6)(2,6) すなわち a=2a=2, b=2b=2 のみ。n=36n=36。

答:n=13,21,26,28,36,42n=13,21,26,28,36,42。

演習 8.4標準

正の整数 a,b,ca,b,c について gcd⁡(a,lcm(b,c))=lcm(gcd⁡(a,b),gcd⁡(a,c))\gcd(a,\mathrm{lcm}(b,c))=\mathrm{lcm}(\gcd(a,b),\gcd(a,c)) を、付値を使って示せ。

解答

各素数 pp で x=vp(a)x=v_p(a), y=vp(b)y=v_p(b), z=vp(c)z=v_p(c) とおく。命題 5.3(3) より左辺の指数は min⁡(x,max⁡(y,z))\min(x,\max(y,z))、右辺の指数は max⁡(min⁡(x,y),min⁡(x,z))\max(\min(x,y),\min(x,z))。y≤zy\le z の場合は min⁡(x,z)\min(x,z) と max⁡(min⁡(x,y),min⁡(x,z))=min⁡(x,z)\max(\min(x,y),\min(x,z))=\min(x,z)(min⁡(x,y)≤min⁡(x,z)\min(x,y)\le\min(x,z) なので)で一致し、y>zy>z の場合も対称。すべての pp で指数が一致するので、定理 5.2 の一意性により両辺は等しい。

  • 高木貞治『初等整数論講義』第 2 版、共立出版、1971 — 第 1 章(整除、最大公約数)、第 2 章(合同式、中国剰余定理)。
  • G. H. Hardy and E. M. Wright, An Introduction to the Theory of Numbers, 6th ed., Oxford University Press, 2008 — 第 2 章(基本定理)、第 5 章(オイラー関数)。
  • K. Ireland and M. Rosen, A Classical Introduction to Modern Number Theory, 2nd ed., Springer GTM 84, 1990 — 第 1 章、第 2 章。
  • D. E. Knuth, The Art of Computer Programming, Vol. 2, 3rd ed., Addison-Wesley, 1997 — 4.5.2 節(ユークリッドの互除法の解析。ラメの定理)。
  • G. Lamé, “Note sur la limite du nombre des divisions dans la recherche du plus grand commun diviseur entre deux nombres entiers”, Comptes Rendus de l’Académie des Sciences 19 (1844), 867–870.

このテーマの 100 本ノック(50 問)

執筆: Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12

この記事の誤りを報告する ・運営: 夢現技研合同会社 ・料金 ・利用条件 ・特定商取引法に基づく表記

© 2026 夢現技研合同会社 ・コード例は MIT ライセンスです。