数の合同
著者:梅谷 武
語句:ポリヤ,エドモンド・ハレー,ウィリアム・ハミルトン,ユリウス・カエサル,クリストファー・クラヴィウス,春分点,マテーマティコイ,法,合同,剰余,非剰余,合同記号,剰余類,剰余系,完全剰余系
数の合同について述べる。
作成:2006-06-07
更新:2021-03-17
この数の合同概念は、数をかぞえようとしたときに自然に発生するものなので、その起源は数の起源と一致すると考えていいでしょう。しかし、上の
合同記号ごうどうきごうはガウスが始めて導入したもので、これによりいろいろな性質が簡単に表現できたり、計算できるようになったという意味で画期的なものでした。
以下、この数の合同に関する基本的な性質を列挙していきます。
整数における合同は同値関係になっている。すなわち、正の整数
mを法としたとき任意の整数
a,b,cに対して次が成り立つ。
(反射律)
| a ≡ a (mod m) |
(対称律)
| a ≡ b (mod m) ⇒ b ≡ a (mod m) |
(推移律)
| a ≡ b (mod m), b ≡ c (mod m) ⇒ a ≡ c (mod m) |
証明
(反射律)
| m | (a-a)=0 |
(対称律)
| m | (a-b) ⇒ m | -(a-b)=(b-a) |
(推移律)
| m | (a-b), m | (b-c) ⇒ m | (a-b)+(b-c)=(a-c) |
■
正の整数
mを法とする合同を同値関係と考えて整数を分割したときの同値類を
剰余類じょうよるい, residue classといいます。ある整数
aについて
aを含む剰余類を
aと書くことにします。例えば、法を
3としたときに整数は三つの剰余類に分割されます。
| | |
| | { ⋯, -6, -3, 0, 3, 6, ⋯ } = {3n | n∈ℤ} |
|
| | { ⋯, -5, -2, 1, 4, 7, ⋯ } = {3n+1 | n∈ℤ} |
|
| | { ⋯, -4, -1, 2, 5, 8, ⋯ } = {3n+2 | n∈ℤ} |
|
a≡b(mod m), c≡d(mod m)のとき次が成り立つ。
(1)
| a + c ≡ b + d (mod m) |
(2)
| a - c ≡ b - d (mod m) |
(3)
| ac ≡ bd (mod m) |
証明
仮定より
m|a-b, m|c-d.(1)
| m | (a+c)-(b+d)=(a-b)+(c-d). |
(2)
| m | (a-c)-(b-d)=(a-b)-(c-d). |
(3)
| m | (ac-bd)=(a-b)c+(c-d)b. |
■
任意の自然数
kについて
a ≡ b (mod m)ならば
任意の整係数一変数多項式
f(X)について
a ≡ b (mod m)ならば
任意の整係数多変数多項式
f(X1,⋯,Xn)について
ai ≡ bi (mod m), i=1,⋯,nならば
f(a1,⋯,an) ≡ f(b1,⋯,bn) (mod m) |
正の整数
k,mについて次が成り立つ。
(1)
| a ≡ b (mod m) ⇒ ka ≡ kb (mod m) |
(2)
| a ≡ b (mod km) ⇒ a ≡ b (mod m) |
(3)
| (k,m)=1, ka ≡ kb (mod m) ⇒ a ≡ b (mod m) |
(4)
| (k,m)=d, ka ≡ kb (mod m) ⇒ a ≡ b (mod m/d)} |
証明
演習とする。■
解答
1723 ≡ 223 ≡ (24)523 ≡ 8 (mod 15)■
合同式の性質を使った検算方法に九去法というものがあります。これは整数
nを
と10進表示したときに、
10i ≡ 1 (mod 9)であることから
が成り立つことを利用したものです。
18472946 × 9364964 = 172998374263944を九去法で検算せよ。
解答
18472946×9364964≡142≡52≡7, 172998374263944≡15≡6(mod 9)より不正。■
異なる法の合同式については次の命題が基本的です。
a≡b(mod m), a≡b(mod n)のとき次が成り立つ。
特に
(m,n)=1のときは、
証明
mとnの各素因数の最大冪peについてpe|mであるかpe|nであるからpe|a-bとなる。■
nを自然数としたときに
Fn = 22n+1の形の数をフェルマー数といいます。
となり、
F4まではすべて素数になっています。このことからフェルマーはすべてのフェルマー数が素数であるということを予想しましたが、1732年にオイラーが
F5 = 232+1 = 641 × 6700417 = 4294967297
|
と素因数分解できることを示し、フェルマーの予想を否定しました。
1924年に
ポリヤPòlya, George, 1887-1985は素数が無限にあることを証明するには、どの二つの項も互いに素であるような自然数の無限数列を見つければよいことから、フェルマー数列
(Fn)n ∈ℕがその条件を満たすことを示し、それにより素数が無限であることを証明しています。
ここでは合同式の性質を使ってこれを示してみましょう。
m>nとし、
pを
p | Fm, p | Fnなる素数であると仮定します。
22n + 1 ≡ 0 (mod p)より
これを
2m-n乗すると
(22n)2m-n ≡ (-1)2m-n (mod p)
|
となり
が成り立ちます。一方、仮定から
22m ≡ -1 (mod p)ですから、
となり、
p | 2です。フェルマー数は奇数ですから
p=2とは成りえず、
p=1であることがわかります。これにより次の命題が証明されました。
フェルマー数列
(Fn)n ∈ℕの任意の二項は互いに素である。
4.3節で冪和公式に関するファウルハーバーの業績について触れましたが、その内容が関・ベルヌーイの冪和公式に比べてかなり複雑であることから本書ではその詳細を述べていません。しかし、その中で
kが奇数のとき、任意の正の整数
nについて
が成り立つことだけは合同式を使って簡単に証明することができます。
n=1のときは成り立ちますので、
n>1と仮定します。
ですから、
n(n+1) | 2(1k + 2k + ⋯ +nk)を示せば結論が得られます。
| | |
| | 2(1k + 2k + ⋯ +(n-1)k) (mod n) |
|
| | (1k + (n-1)k) + (2k + (n-2)k) + ⋯ +((n-1)k+1k) (mod n) |
|
| | (1k + (-1)k) + (2k + (-2)k) + ⋯ +((-1)k+1k) (mod n) |
|
kが奇数であることから一番下の式は
nを法として
0になり、
n | 2Pk(n)が成り立ちます。
| | |
| | (1k + nk) + (2k + (n-1)k) + ⋯ +(nk+1k) |
|
| | (1k + (-1)k) + (2k + (-2)k) + ⋯ +((-1)k+1k) (mod n+1) |
|
やはり
kが奇数であることから一番下の式は
n+1を法として
0になり、
n+1 | 2Pk(n)が成り立ちます。
n>1のとき
(n,n+1)=1ですから
n(n+1) | 2Pk(n)が証明できました。
また、任意の正の整数
nについて
P1(n) | Pk(n)が成り立つので、
系3.6.59より多項式として
P1(X) | Pk(X)が成り立つこともわかります。
天体の運動から生活のために必要な情報を得るということは、人類が古代から取り組んできた問題です。さまざまな民族がそれぞれ独自に数学を発達させてきた一つの要因は、よりよい暦を作成する必要に迫られたためであると考えられます。西洋の数学の起源はピュタゴラス派の分派であるマテーマティコイが数論、幾何学、音楽、天文学をマテーマタ(学ばるべきもの)と呼んだことに由来することからわかるように、古代においては天文学は数学に含まれていました。
ここでは、数の合同概念と暦法がどのようにかかわっているのかを簡単な例で見てみましょう。
暦法の一つの問題として「一年を何日にするか」ということがあります。ここで、一年とは地球から見た太陽が、
春分点しゅんぶんてん, vernal equinoxを通過したときから次に春分点を通過するまでの時間のことです。一日とは地球から見た太陽が、ちょうど真南を通過したときから次に真南を通過するまでの時間です。ややこしいのは地球の自転や公転の周期が常に変動しているということです。現在は1900年初頭の平均太陽日と平均太陽年を採用していますが、それによると一年は
365.24219879日となっています。
古代ローマ帝国の初代皇帝となった
ユリウス・カエサルCaesar, Gaius Iulius, B.C.100-B.C.44はユリウス暦を定めました。これは一年を
365.25日と決めて、平年を
365日、四年毎の閏年を
366日として、暦のずれを補正するものです。しかし、これですと一年に
365.24219879 - 365.25 = 0.00780121 [日]
|
だけずれていって、128年経過すると
0.00780121 × 128 = 0.99855488 [日]
|
となり、約一日ずれることになります。
ヨーロッパではこのユリウス暦が16世紀まで使われていました。しかし、その頃になるとそのずれは10日ぐらいまでになり暦と季節とのずれがはっきりしてきて、改暦の必要性が生じました。教皇グレゴリウス13世は、1579年に
クリストファー・クラヴィウスClavius, Christopher, 1538-1612らを中心とした委員会を発足させ、改暦問題を研究させました。委員会ではコペルニクスを含む天文学者達に計算させて一年を
365.2425日と定めました。この新しいグレゴリオ暦は1582年2月24日に発布され、同年10月4日木曜日の翌日が10月15日金曜日とされました。それ以来、現在に至るまでこの暦が多くの国々で使われています。日本では1900年に採用されました。
グレゴリオ暦では一年に
365.24219879 - 365.2425 = 0.00030121 [日]
|
だけずれていって、3320年経過すると
0.00030121 × 3320 = 1.0000172 [日]
|
となり、約一日ずれることになります。この3000年の間には暦によるずれだけではなく、地球の自転や公転のずれなどの別の要因による補正が必要になりますので、十分な精度になっています。
それではグレゴリオ暦において平年を365日、閏年を366日として補正する場合、閏年をどのように定めたのでしょうか。まず、ユリウス暦と同じように閏年
Xを
と定めると4年間が
365 × 3 + 366 = 1460[日]となり、対応する太陽年
365.2425 × 4 = 1459.97[日]との差は
0.03[日]です。これでは400年で3日多くなってしまいます。そこで100年おきに閏年を平年とし、400年目には閏年にすると定めました。つまり、閏年
Xの中で
という条件を満たすものを平年にすると定めたのです。最近では1900年は平年で2000年は閏年となりました。
日常的に必要となる暦法の問題として「指定された年月日が何曜日であるかを求める」ということがあります。ある暦における各年月日に対して、その暦の最初の日から経過した日数を対応させることによって、自然数とその暦の年月日を一対一に対応させることができます。曜日というのは日、月、火、水、木、金、土という七種類を繰り返して年月日を分類する
ことですから、経過日数を法7で考えれば曜日を求めることができます。
曜日と法
7の完全剰余系との対応を次のように定めます。
曜日と法7の剰余系の対応
0 | 1 | 2 | 3 | 4 | 5 | 6 |
日 | 月 | 火 | 水 | 木 | 金 | 土 |
グレゴリオ暦ではその最初の日である1582年10月15日が金曜日と定められましたが、経過日数をこの日から計算しようとするとやや複雑になりますので、1581年12月31日を0として、1582年1月1日を第1日目とするような経過日数を計算し、それを法7で考えます。
まず、年数
nが与えられたときに
0年から
n年までにある閏年の数を求める方法ですが、正の整数
aについて、
は
n/aを超えない最大の整数を表わします。これは
nを超えない
aの正の倍数の個数と考えられますので、これを利用して閏年の数を計算します。
(year,month,day)を年月日の指定する数の組としたとき、(year-1)年12月31日までの経過日数はすべてを平年と考えた経過日数
と1582年から(year-1)年までにあった閏年の数
の和になります。
(month-1)月までの経過日数はその年が平年か閏年かで変わりますので、各月の日数表を2種類用意してそれを参照して計算することにします。この二つにdayを加えれば経過日数dが得られます。
後は基準日である1581年12月31日が木曜日、法7で考えれば4となるので、d + 4を法7の完全代表系で表わせば曜日が求まります。これをプログラミングしてみましょう。
# -*- coding: utf-8 -*-
Common = [31,28,31,30,31,30,31,31,30,31,30,31]
Leap = [31,29,31,30,31,30,31,31,30,31,30,31]
WeekChars = [u'日',u'月',u'火',u'水',u'木',u'金',u'土']
def DayOfWeek( year, month, day ):
if ( year < 1582 ):
raise ValueError, "Week:year error %d" % year
if ( month < 1 ) or ( month > 12 ):
raise ValueError, "Week:month error %d" % month
if ( year % 4 == 0 ):
if ( year % 100 == 0 ) and ( year % 400 != 0 ):
DaysOfMonth = Common
else:
DaysOfMonth = Leap
else:
DaysOfMonth = Common
if ( day < 1 ) or ( day > DaysOfMonth[month-1] ):
raise ValueError, "Week:day error %d" % day
a = (year-1582)*365 + (year/4) - (1582/4) \
- (year/100) + (1582/100) + (year/400) - (1582/400)
b = 0
for i in range( month - 1 ):
b += DaysOfMonth[i]
d = a + b + day
w = ( d + 4 ) % 7
return w
data = [(1582,10,15),(1623,6,19),(1643,1,4),(1777,4,30)]
for d in data:
w = DayOfWeek( d[0], d[1], d[2] )
print "%4d.%2d.%2d %s" % (d[0],d[1],d[2],WeekChars[w])
1582.10.15 金
1623. 6.19 月
1643. 1. 4 日
1777. 4.30 水
# coding: utf-8
$Common = [31,28,31,30,31,30,31,31,30,31,30,31]
$Leap = [31,29,31,30,31,30,31,31,30,31,30,31]
$WeekChars = ['日','月','火','水','木','金','土']
def DayOfWeek(year, month, day)
if ( year < 1582 )
raise ValueError, "Week:year error"
end
if ( month < 1 ) or ( month > 12 )
raise ValueError, "Week:month error"
end
if ( year % 4 == 0 )
if ( year % 100 == 0 ) and ( year % 400 != 0 )
$DaysOfMonth = $Common
else
$DaysOfMonth = $Leap
end
else
$DaysOfMonth = $Common
end
if ( day < 1 ) or ( day > $DaysOfMonth[month-1] )
raise ValueError, "Week:day error"
end
a = (year-1582)*365 + (year/4) - (1582/4)
- (year/100) + (1582/100) + (year/400) - (1582/400)
b = 0
for i in 0...(month - 1)
b += $DaysOfMonth[i]
end
d = a + b + day
w = ( d + 4 ) % 7
return w
end
data = [[1582,10,15],[1623,6,19],[1643,1,4],[1777,4,30]]
for d in data
w = DayOfWeek(d[0], d[1], d[2])
printf "%4d.%2d.%2d %s\n", d[0], d[1], d[2], $WeekChars[w]
end
1582.10.15 金
1623. 6.19 月
1643. 1. 4 日
1777. 4.30 水
[
4] G.H. ハーディ, E.M. ライト,
数論入門〈1〉, シュプリンガー・フェアラーク東京, 2001
註 釈
*1 | 20世紀の考古学の進歩により、ピュタゴラス派の数学はバビロニアを起源としていることが次第にあきらかになってきている。 |
人 物
ポリヤ Pòlya, George, 1887-1985
エドモンド・ハレー Halley, Edmond, 1656-1742
イギリスの天文学者、物理学者、数学者、気象学者。1705年にハレー彗星の軌道計算の結果から1758年に接近すると予言し、その通りになった。
ウィリアム・ハミルトン Hamilton, William Rowan, 1805-1865
アイルランドの数学者、天文学者。
ユリウス・カエサル Caesar, Gaius Iulius, B.C.100-B.C.44
古代ローマの政治家。
クリストファー・クラヴィウス Clavius, Christopher, 1538-1612
ドイツの数学者、天文学者。
自 然
春分点 しゅんぶんてん, vernal equinox
太陽が南半球から北半球へ赤道面を通過する点。
数 学
法 ほう, modulus
合同 ごうどう, congruent
剰余 じょうよ, residue
非剰余 ひじょうよ, non-residue
合同記号 ごうどうきごう
ガウスは『整数論』第1章 数の合同に関する一般的な事柄において'≡'を合同を表わす記号として用いた。
剰余類 じょうよるい, residue class
剰余系 じょうよけい, system of residues
完全剰余系 かんぜんじょうよけい, complete system of residues