2 シ リ ー ズ ・・
数学の世界 野ロ 廣 蹄
情報の数理 山本
慎 著
朝倉書店
ま え が き
大 学 で情 報 処 理 の リテ ラ シ ー 教 育 を 十 数 年 担 当 して い ます が,前
の 年 ...
83 downloads
649 Views
14MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
2 シ リ ー ズ ・・
数学の世界 野ロ 廣 蹄
情報の数理 山本
慎 著
朝倉書店
ま え が き
大 学 で情 報 処 理 の リテ ラ シ ー 教 育 を 十 数 年 担 当 して い ます が,前
の 年 に行 っ
た こ とを そ の ま ま次 の 年 も同 じ よ う に行 う こ とは まず あ り ませ ん.す べ て の 準 備 を し直 さな け れ ば な ら ない とい った ら,少 しが 必 要 に な ります.去 テ ー マ や,逆
しオ ー バ ー で す が,か
な りの 手 直
年 は 扱 っ た け れ ど今 年 は や る ほ どの こ と は な い とい う
に,今 年 か ら は こ うい う こ と もや っ て お か な け れ ば と い うテ ー マ
が で て くる こ とが あ ります,去 年使 っ た ア プ リ ケー シ ョ ンソ フ トのバ ー ジ ョンが 上 が っ て,使 用 方 法 が 大 き く変 わ る とい う こ とや,去 年 まで は 一 般 的 で よ く使 わ れ てい た ア プ リ ケ ー シ ョン ソ フ トが 今 年 は よ りす ぐれ た 機 能 を もつ ほ か の も の に置 き換 わ っ て い る こ と も あ り ます.そ
して,3,4年
コ ン ピュ ー タそ の もの が リプ レー ス され て,使 と もあ ります.コ
に 一 度 は,授 業 で使 う
い勝 手 が全 く変 わ っ て し ま う こ
ン ピュ ー タが リプ レー ス され な くて も,OSが
バ ー ジ ョン ア ッ
プ した り,全 くほ か の もの に 変 わ っ て しま った り,ウ ィ ン ドウ ズ マ ネ ー ジ ャ ー と よば れ る基 本 的 な ソ フ トウ ェ ア が 変 わ る こ と もあ ります. コ ン ピュ ー タが リ プ レー ス され れ ば,CPUの リー が 桁 違 い に増 えて,い
処 理 能 力 が 向 上 し た り,メ モ
ま まで は で きな か っ た よ うな こ と も で きる よ うに な
り ます.し か し,コ ン ピ ュ ー タが 一 度 に処 理 で き る情 報 量 が 増 え た り,補 助 記 憶 装 置 の 容 量 が 大 き くな っ た り,そ れ に伴 っ て,ア
プ リケ ー シ ョ ン ソ フ トも よ
り便 利 な 性 能 を備 えた もの に な っ た り して も,基 本 的 に は 変 わ らな い も の もあ り ます. こ の本 で は,コ
ン ピ ュ ー タ の 中 で,整 数 や実 数 が どの よ う に表 さ れ て い る か
とい う よ うな,一 度 に 扱 え る桁 数 な ど は増 え て も,本 質 的 な と こ ろ に 変 化 の な い こ とが ら を説 明 す る こ とを1つ
の 目的 と して い ます.
ま た,ハ ー ドウ ェ ア の 進 歩 だ け で は な く,処 理 をす る 手 順,い
わゆ るアル ゴ
リズ ム を くふ うす る こ とで 処 理 を 高 速 化 で き ます が,そ
の よ う な こ とを 勉 強 す
る上 で,前 提 と され る知 識 を 説 明 す る こ と を も う1つ の 目的 と して い ます. こ の シ リー ズ の 趣 旨 にあ わせ て,な
るべ く前 提 知 識 を 仮 定 せ ず に読 み 始 め ら
れ る よ う に,ま た,解 答 の ない 練 習 問題 な ど も さけ て,例
や 例 題 は で きる だ け
て い ね い に説 明す る よ う に しま した.そ の よ うな わ け で,少
し難 しい こ と を前
提 とす る こ とが らの 証 明 は省 い て あ ります. 車 を運 転 す るの に,エ
ン ジ ン につ い て の 深 い 知 識 が 必 要 で ない よ うに,ほ
と
ん ど毎 日ふ れ て い る コ ン ピ ュー タ もそ の 内 部 で どの よ うな処 理 が さ れ て い る か な ど とい う こ とは 知 ら な くて も よ い の で す が,ち た い とか,詳
ょっ とそ ん な こ と も知 っ て み
し く知 りた い け れ どい きな り難 しい本 を読 む の は ど う も,と い う
方 に は役 に 立 つ と思 い ます. 最 後 に,全
く筆 の 進 ま ない 筆 者 を暖 か く見守 りつ つ,出 版 まで 導 い て くだ さ っ
た朝 倉 書 店 編 集 部 の方 々 に 心 か らの 感 謝 の 意 を表 した い と思 い ます. 2002年9月 山 本
慎
目
次
1 . ア ル ゴ リ ズ ム
1
1.1 ア ル ゴ リ ズ ム
1
1.2 プ ロ グ ラ ム
3
1.3 ア ル ゴ リ ズ ム の 記 述
5
1.4 ア ル ゴ リ ズ ム と計 算 量
8
1.5 大 き いO
記法
112
. 整 数 に つ い て 2.1 10進
数,2
13 進 数,そ
して β 進 数
13
2.1.1
整 数 の2 進 表 現
13
2.1.2
β進 数
14
2.1.3 2進
数 へ の変 換
2.2 累 乗 の 計 算 の ア ル ゴ リ ズ ム:2進 2.3
15 表 現 を利 用 して
コ ン ピ ュ ー タの 内 部 で の 整 数 の 表 現
18 21
2.3.1
整 数 の表 現
21
2.3.2
整 数 の加 減 算
25
2.4 桁 数 の 多 い 整 数 の 演 算
2.4.1
多倍長整 数の掛 け算
2.4.2
多 倍 長 整 数 の 割 り算
27
34
36
2.5 ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
38
2.5.1
最大公約 数の計算
2.5.2
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と フ イ ボ ナッ チ 数
38
46
2.6 素 数 に つ い て の ア ル ゴ リ ズ ム
48
2.6.1
素
数
2.6.2
エ ラ トス テ ネ ス の 節(ふ
2.6.3
フェ ル マ ー の 小 定 理
51
2.6.4
フェ ル マ ー 数 と カ ー マ イ ケ ル 数
52
2.6.5
フェ ル マ ー の 素 数 判 定 テ ス ト
る)い
3. 実 数 に つ い て 3.1 実 数 の2進
48
53
表現
49
58
58
3.1.1
実 数 の2進
表現
58
3.1.2
実 数 の2進
表現へ の変換
59
3.2 浮 動 小 数 点 数 3.2.1
浮動小数点数
3.2.2
丸
め
3.2.3
浮動小数点数 の加減算
3.2.4
い ろ い ろ な誤 差
61 61
68 71
74
3.2.5
浮 動 小 数 点 数 と誤 差
75
3.2.6
四則演算の誤差 限界
77
3.2.7
2 次 方 程 式 の 解 の 公 式 と誤 差
78
3.2.8
累 和 を計 算 す る と きの 誤 差
804
. 方 程 式 の 数 値 解 法
81
4.1 解 析 学 の 初 歩 の 復 習
81
4.1.1
コ ー シー 列 と完 備 な 区 間
81
4.12
テ イ ラ ー展 開
82
4.2 多 項 式 の 計 算
85
4.2.1
素 朴 な 方法
85
4.2.2
ホーナーの方法
87
4.2.3
ホ ー ナ ー の 方 法 に よ る微 分 係 数 の計 算
4.3
ニ ュ ー トン法
89 91
4.3.1
方 程 式 の 直 接 解 法 と間接 解 法
91
4.3.2
ニ ュ ー ト ン 法 の 定 義 と例
92
4.3.3
ニ ュ ー ト ン法 と グ ラ フ
4.3.4
ニ ュ ー トン 法 と テ イ ラ ー 展 開
4.3.5
ニ ュ ー トン法 以 外 の 反復 法
98
4.3.6
縮 小 写 像 と不 動 点定 理
98
4.3.7
ニ ュ ー トン法 の 収 束
97
101
4.4 連 立 1次 方 程 式 の 数 値 解 法
102
4.4.1
連 立 1次 方 程 式 と行 列
4.4.2
ク ラ メ ルの 公 式 と計 算 量
4.4.3
行 列 が 正 則 で あ るた め の 十 分 条件
4.4.4
ガウスの消去法
4.4.5
LU分
102 103 105 106
解
4.5 連 立 1次 方 程 式 の 解 法:反
97
113 復 法
4.5.1
反復 法
4.5.2
連 立 1次 方 程 式 の 反 復 解 法 の 収 束 定 理
114 114 118
5. ソ ー トと サ ー チ の ア ル ゴ リ ズ ム
122
5.1 ソ ー トの ア ル ゴ リ ズ ム
122
122
5.1.1
ソー ト
5.1.2
単 純 選 択 ソー ト
122
5.1.3
単 純 挿 入 ソー ト
126
5.1.4
バ ブル ソー ト
130
5.1.5
シェル ソー ト
132
5.1.6
クイ ックソー ト
135
5.2 サ ー チ の ア ル ゴ リ ズ ム
137
5.2.1
逐次探索 法
137
5.2.2
バ イ ナ リー サ ーチ
138
5.3 文 字 列 照 合 の ア ル ゴ リ ズ ム
141
141
5.3.1
素朴 な方法
5.3.2
ボ イ ヤ ー 一ム ー ア の ア ル ゴ リ ズ ム
参 考 文 献
索
引
145
153
155
1 ア ル ゴ リ ズ ム
1か ら100ま
で の 整 数 の 和 を 求 め る の に,大
数 学 者 ガ ウ ス は,こ
ど もの こ ろ
に,1+2+…+100=(1+100)+(2+99)+…+(50+51)=101×100÷2 と し て,5050と
い う 答 を 出 し た と い う 話 は,よ
2+…+n=n(n+1)/2と
く 知 ら れ て い る.つ
い う 公 式 を 導 い た わ け で,あ
し ま う.で
は,n
が た と え ば3872685の
る の と,順
番 に1+2+…+3872685と
タ で す る の と で は,ど
と き に,こ
ま り,1+
っ と い う間 に計 算 で きて の公 式 を用 い て暗 算 で 求 め
い う3872684回
の 足 し算 を コ ン ピ ュ ー
ち ら が 速 く 計 算 で き る だ ろ う か.
ま た,1+2+3を
求 め る に は,こ
の ま ま,2 回 の 足 し算 を す る の と,3×4÷2
と 1回 の 足 し算,1
回 の 掛 け 算,1
回 の 割 り算 を す る の と で は,ど
ち らが 簡 単
で あ ろ う か. こ の 本 で は,問
題 を 解 く 手 順,い
わ ゆ る ア ル ゴ リズ ム に つ い て 述 べ る こ と が
1つ の テ ー マ で あ る.1+2+…+nを
求 め る の に,1
1つ の ア ル ゴ リ ズ ム で あ り,n(n+1)/2と
つ 1つ 足 し て い く の も
い う 式 か ら 求 め る と い う の も 1つ の ア ル
ゴ リ ズ ム で あ る. ま ず,ど
の よ う な 手 順 を ア ル ゴ リ ズ ム と よ ぶ の か,ア
に 記 述 す る の か,ア
ル ゴ リズ ム を どの よ う
ル ゴ リズ ム の 性 能 は ど の よ う に 評 価 す る の か,と
いった こ
と を 簡 単 に 述 べ る こ と か ら始 め よ う .
ア ル ゴ リ ズ ム(algorithm)と
1.1
ア ル ゴ リ ズ ム
は,与
え ら れ た 問 題 を 解 く手 順 で あ る.た
とえ
ば,異
な る 3つ の 実 数 5, 8, 2
を 小 さ い 順 に 並 べ る と い う 問 題 を 考 え る . こ れ は あ ま り に 簡 単 な 例 な の で,一 目 見 れ ば, 2, 5, 8 と 答 え が 得 ら れ,ど
の よ う に した か を 説 明 す る の が 難 し い ほ ど で あ ろ う.で
具 体 的 に 異 な る 3つ の 実 数 が 与 え ら れ て い る わ け で は な く,一
は,
般 に
x1,x2,x3 が 与 え ら れ て い る と き,小
さ い 順 に 並 べ る に は ど う す る か を,ど
し て も,誰
き る よ う に 説 明 す る と し た ら ど う し た ら よ い だ ろ う.
が や っ て も,で
ん な実 数 に対
次 の よ う に 説 明 す る の も 1つ の 方 法 で あ る .
(a1)
3 つ の 数x1,x2,x3の
中 で,最
(a2)
minと
(a3)
残 り をmaxと
(a4)
こ の よ う に す れ ば,min,mid,maxが
小 の も の をminと
し た も の 以 外 の 2つ の 数 の 小 さ い 方 をmidと
つ の 数 の 中 で,最
小 さ い 順 に 並 べ た も の で あ る.
ず,"3
番 問 題 な の に,ど
の よ う に探 す か は 示 さ れ て い な い.そ
(b1) x1とx2を
比 較 し,改
(b2) x1とx3を
比 較 し て,改
め て,小
(b3) x2とx3を
比 較 して,改
め て,小
め て,小
こ の と き のx1,x2,x3が
と す れ ば,か
す る.
す る.
こ の 手 順 で は,ま
(b4)
す る.
な り具 体 的 に な る.た
に つ い て こ れ を 実 行 し て み る と,
小 の も の"を 探 す と あ る が,そ
さ い 方 をx1,大
こ で,も
れが 一
う 少 し詳 し く,
き い 方 をx2と
す る.
さ い 方 をx1,大
き い 方 をx3と
す る.
さ い 方 をx2,大
き い 方 をx3と
す る.
小 さ い 順 に 並 ん で い る.
と え ば,最
初 の,x1=5,x2=8,x3=2
(b1) x1=5とx2=8を
比 較 し,小
と す る.こ
の と き は,最
(b2) x1=5とx3=2を x3と
さ い 方 の 5 をx1,大
比 較 し て,小
す る.つ
ま り,こ
き い 方 の 8 をx2
初 の 状 態 と何 も 変 わ っ て い な い . さ い 方 の 2 をx1,大
き い方 の 5を
の 結 果,x1=2,x2=8,x3=5と
な り,x1
が 3 つ の 数 の 最 小 の も の と な る. (b3) x2=8とx3=5を x3と (b4)
比 較 して,小
す る.結
果 は,x1=2,x2=5,x3=8と
し た が っ て,x1,x2,x3が
こ の 本 で は,最 (b1)∼(b4)を
さ い 方 の 5 をx2,大 な る.
小 さ い 順 に 並 ん で い る こ と に な る.
初 に 書 い た 手 順(a1)∼(a4)よ
ア ル ゴ リ ズ ム と よ び た い.つ
り,こ
ま り,あ
●何 か 入 力,す
な わ ち,ア
●各 操 作 は,た
だ 一 通 り に 行 わ れ る よ う に,厳
●や ろ う と 思 え ば,人
きい 方 の 8 を
の 2番 目 に書 い た 手 順
る 問 題 を 解 く手 順 で,特
ル ゴ リズ ム を 開 始 す る 前 に 与 え られ る 量,が
に,
あ っ て,
密 に 定 義 さ れ て い て,
が 紙 と鉛 筆 で そ の 操 作 を す る こ と が で き,
●有 限 回 の 操 作 で, ●出 力,す
な わ ち 何 ら か の 答 を 得 る,
と い う 条 件 を 満 た す もの を ア ル ゴ リズ ム と い う こ と に し よ う .こ の 手 順(b1)∼(b4)は
1.2
プ
こ の 本 で 扱 う ア ル ゴ リ ズ ム は,原 で あ る が,実 い る.そ
の 意 味 で,上
ア ル ゴ リズ ム と い う こ とが で き る.
際 に は,コ
の と き,1.1節
ロ
グ
ラ
ム
理 的 に は紙 と鉛 筆 で行 う こ とが で き る も の
ン ピ ュ ー タ を使 っ て 処 理 を す る と い う こ と を 意 識 し て に 書 い た ま ま を コ ン ピ ュ ー タ に 入 力 し た ら ,そ
れ をコ
ン ピ ュ ー タ が 実 行 して く れ る と い う ほ ど ま で に は ,現
在 の コ ンピュータはな っ
て い な い.ア
語"を
ル ゴ リ ズ ム を 記 述 す る た め の 特 別 な"言
ム を 書 き 表 し,そ
れ を コ ン ピ ュ ー タ へ 入 力 し,コ
に 書 き 換 え て,実
行 し,答
を得 る,と
用 い て ア ル ゴ リズ
ン ピュ ー タが 実 行 で き る もの
い う手 順 を 踏 む 必 要 が あ る.そ
の ような
"言 語"を
プ ロ グ ラ ミン グ言 語 とい い
語 の 文 法 と い う.あ
,書
き方 の ル ー ル を そ の プ ログ ラ ミン グ 言
る プ ロ グ ラ ミ ン グ 言 語 で ア ル ゴ リズ ム を 書 き表 し た も の が,
そ の ア ル ゴ リ ズ ム の プ ロ グ ラ ム で あ る.多
くの プ ロ グ ラ ム ミ ン グ 言 語 の プ ロ グ
ラ ム は 人 が 理 解 で き る よ う な 形 式 で 書 か れ て い る. プ ロ グ ラ ミ ン グ 言 語 に は い ろ い ろ な 種 類 が あ る が,た た ア ル ゴ リ ズ ム(手 順(b1)∼(b4))を と,そ
れ ぞ れ 次 の よ う に な る.
プ ロ グ ラ ム:C
言 語 に よ る例
\include<stdio>
int
main(void)
{
float
if(x1>x2)
{
x1,x2,x3,
t=x1;x1=x2;x2=t;
} if (x1>x3)
{
t=x1;x1=x3;x3=t;
}
if(x2>x3)
{
t=x2;x2=x3;x3=t;
} }
t;
C 言 語 とPascalと
と え ば,1.1節
にあ げ
い う言 語 で書 き表 す
プ ロ グ ラ ム
:Pascal言
program
var
procedure
語 に よ る例
sortalgorithm(input,output) x1,x2,x3,t:real
sort\verb+_+3;
begin
if(x1>x2)then
begin
if
t=x1;x1=x2;x2=t
(x1>x3) begin
end;
then t =x1;x1=x3;x3=t
end;
if (x2>x3)
begin
t =x2;x2
=x3;x3
= t end;
end begin
read(x1,x2,x3);
sort_3; write(x1,x2,x3);
writln end
ど ち ら も,細
か い と こ ろ は わ か ら な い と し て も,大
ま か に は 何 を して い る か
を 読 み と る こ と は で き る だ ろ う.
1.3
ア ル ゴ リズ ムの 記 述
ア ル ゴ リ ズ ム を ふ つ う の こ と ば で 書 く と,く と が あ る . か と い つ て,特
有 の 言 い 回 し な ど に 束 縛 さ れ て し ま う し,ア に 気 を使 う こ と に な る . そ こ で,本 す る.細
か い 説 明 は,必
ル ゴ リ ズ ム(b1)∼(b4)を
ど く な っ た り,不
正確 になる こ
定 の プ ロ グ ラ ミ ン グ 言 語 で 記 述 す る と ,そ
書 で は,独
要 な と き に,そ
の言語特
ル ゴ リズ ム の 本 質 的 で な い と こ ろ 自の 書 き方 を あ え て す る こ と に
の つ ど す る こ と に す る が,1.1節
例 に書 い て み よ う.
の ア
ア ル ゴ リ ズ ム1.1:3
つ の異 な る実 数 の 並 べ替 え
入 力:異
な る 3 つ の 実 数x1,x2,x3
出 力:小
さ い 順 に 並 べ 替 え たx1,x2,x3
ス ア ツ フ: (1) も し,x1>x2な
ら ば,次
を行 う
t←x1
x1←x2 x1←t
{こ れ に よ り,x1>x2の
(2) も し,x1>x3な
ら ば,次
と き,x1とx2の
値 が 入 れ 替 わ る}
を行 う
t←x1
x1←x3 x1←t
{こ れ に よ り,x1>x3の
(3) も し,x2>x3な
ら ば,次
と き,x1とx3の
値 が 入 れ 替 わ る}
を行 う
t←x2
x2←x3 x3←t {こ れ に よ り,x2>x3の (4) x1,x2,x3を
と き,x2とx3の
出力
こ こ で 使 わ れ て い る,t,x1,x2,x3は に は,入
変 数 と よ ば れ る.最
初 にx1,x2,x3
力 と し て 何 か 具 体 的 な 数 が 与 え ら れ て い る と 考 え て も よ い.
t←x1
と い う の は"変
数t
入 文 と い う.一
般 に,
値 が 入 れ 替 わ る}
も しA
に 変 数x1の
な ら ば,B
値 を代 入 す る"と
い う 操 作 を 表 す.こ
れ を代
と い う の は,条
件A
が 成 り 立 て ば B を 行 い,成
ス テ ッ プ へ 進 む こ と を 表 す.ス
テ ッ プ(1)で
り立 た な け れ ば何 もせ ず 次 の
は,A
が
x1>x2 で あ り,B
が,
t←x1 x1←x2 x1←t で あ る.こ
れ を 条 件 文 と い う.そ
{こ れ に よ り,x1>x2の
と い の は,ア
の あ との
と き,x1とx2の
値 が 入 れ 替 わ る}
ル ゴ リズ ム の 手 順 と は 直 接 関 係 な い 注 意 書 き で ,注 釈 文(comment)
と よ ば れ る.本
書 で は,注
釈 文 は{と}で
囲 っ て 表 す こ と に す る .条
成 り立 つ と き行 う こ と は ど こ か ら ど こ ま で か,次 か を わ か り や く す る た め に,条
い う.し
も し,x1>x2な
の ス テ ッ プが どこ か ら始 ま る
件 文 の 条 件 が 成 り立 っ た と き に 行 う部 分 の 各 行
の 先 頭 を 数 文 字 下 げ て 書 き 始 め る こ と に す る.こ (indentation)と
件文 が
の よ うに す る こ と を字 下 げ
た が っ て,
ら ば,次
を行 う
t←x1 x1←x2
x1←t と い う の は,x1>x2が の 値 とx2の
成 り立 つ と き,そ
値 を 入 れ 替 え る.x1>x2が
の あ と の 3 つ の 代 入 文 を 実 行 し てx1 成 り立 た た な け れ ば ,何
し た が っ て,こ
の ス テ ッ プ が 済 ん だ と き に は,最
び 直 さ れ る.こ
こ で,
も し,x1>x2な x1←x2
ら ば,次
を行 う
初 のx1,x2が
も し な い.
小 さい 順 に並
x2←x1 と し て し ま っ て は,x1に 意 して ほ し い.同
も,も
との 物
が 代 入 され て しま う こ とに 注
じ よ う に し て,
も し,x1>x3な
もx2に
ら ば,次
を行 う
t←x1
x1←x3 x1←t と い う ス テ ッ プ が 済 ん だ と き は,x1に
は,最
い も の が 蓄 え ら れ て い る こ と に な る.さ
も し,x2>x3な
ら ば,次
初 のx1,x2,x3の
中で一番小 さ
ら に,
を行 う
t←x2 x2←x3 x3←t に よ り,最
初 のx1,x2,x3の
も の がx3に
中 で 2 番 目 に 小 さ い も の がx2に,一
番 大 きい
入 っ て い る こ と に な る.
こ の ほ か の ア ル ゴ リ ズ ム の 書 き 方 は,新
し く出 て きた と き に そ の つ ど説 明 す
る こ と に す る.
1.4
xnを
求 め る こ と を 考 え る.た
x×x×x×xだ
か ら,こ
ア ル ゴ リズ ム と計 算 量
と え ば,n=7と
れ を 本 書 で の ア ル ゴ リ ズ ム の 書 き 方 で 表 す と,次
よ う に な る.
ア ル ゴ リ ズ ム1.2:x7の 入 力:実 出 力:x7
数x
し よ う. x7=x×x×x×
計 算(素 朴 な 方 法)
の
ス テ ツ プ: (1) x2←x×x (2) x3←x2×x (3) x4←x3×x (4) x5←x4×x (5) x6←x5×x (6) x7←x6×x (7) x7を
出力
こ こ で,少
し考 え て,
x7=(x2×x)2×x
と な る こ と を 利 用 す る と,次
ア ル ゴ リ ズ ム1.3:x7の
の よ う に す る こ と も で き る.
計 算(少
し く ふ う を し て)
入 力:実数x 出 力:x7 ス テ ツ プ: (1) x2←x×x (2) x3←x2×x (3) x4←x3×x3 (4) x5←x4×x (5) x5を
出力
ア ル ゴ リ ズ ム1.2と れ ぞ れ,6
ア ル ゴ リ ズ ム1.3の
回 と 4 回 で あ る.掛
紙 と 鉛 筆 で 行 う と き,電 そ れ ぞ れ 異 な る.紙
掛 け 算 の 回 数 を比 較 して み る と,そ
け 算 を す る の に か か る 時 間 は,暗
卓 を 使 う と き,コ
算 で 行 う と き,
ン ピ ュ ー タ を 使 う と き,な
と 鉛 筆 で 行 う に し て も 人 に よ り異 な る し,コ
どによ り
ン ピュ ー タ も
ど の よ う な 性 能 の も の を 使 う か で 異 な る.し
か し,掛
ア ル ゴ リ ズ ム1.2よ
ほ うが 掛 け算 の 回 数 が 少 な くて 済
む の で,計
り も ア ル ゴ リ ズ ム1.3の
算 の 手 間 が 少 な い.こ
け 算 の 回 数 を比 較 す れ ば,
の 意 味 で ア ル ゴ リ ズ ム1.3の
ほ うが 優 れ て い
る と い っ て よ い で あ ろ う. ア ル ゴ リ ズ ム の 中 で 行 わ れ る 主 要 な 操 作 を 1回 行 う こ と を 1単 位 と し て,そ の ア ル ゴ リズ ム の 中 で そ の 操 作 が 行 わ れ る 回 数 をそ の ア ル ゴ リ ズ ム の 時 間 計 算 量(time
complexity)と
ム1.2の
時 間 計 算 量 は 6,ア
ア ル ゴ リ ズ ム1.2で れ て い て,ア て い る.こ
い う.つ
ま り,掛
け 算 1 回 を 1単 位 と し て ア ル ゴ リ ズ
ル ゴ リ ズ ム1.3の
時 間 計 算 量 は 4 と な る.
は,x,x2,x3,x4,x5,x6,x7の
ル ゴ リ ズ ム1.3で の よ う に,あ
7個 の 変 数 が 使 わ
は,x,x2,x3,x4,x5の
5個 の 変 数 が 使 わ れ
る ア ル ゴ リ ズ ム の 中 で 必 要 と さ れ る 変 数 の 個 数 を,そ
の ア ル ゴ リ ズ ム の 領 域 計 算 量(space
complexity)と
領 域 計 算 量 は 7,ア ル ゴ リ ズ ム1.3の
領 域 計 算 量 は 6 で あ る.ア
は,次
の よ う に,領
ル ゴ リ ズ ム1.2の ル ゴ リ ズ ム1.3
域 計 算 量 を 2 と す る こ と が で き る.
ア ル ゴ リ ズ ム1.4:x7の 入 力:実
い う.ア
計 算(さ
ら に く ふ う を し て)
数x
出 力:y=x7 ス テ ツ プ: (1) y←x×x (2) y←y×x (3) y←y×y (4) y←y×x (5) yを
出力
ス テ ッ プ(2)の
y←y×x と い う の は,右
辺 で のy
は 直 前 の ス テ ッ プ(1)で
のx2が
蓄 え ら れ て い て,そ
れ にx
を掛 け た も の を あ ら た め てy
して,y
に はx3が
代 入 さ れ る.つ
に,x2,x3,x6,x7と
と す る,と
ま り,各
ス テ ッ プ で の 左 辺 のy
1.5
大 き いO
量 が ど の よ う に 変 化 す る か を 考 え る.入
つ う入 力 の サ イ ズ に 応 じ て,計
力 の サ イ ズ と は,入
き さ の 順 に 並 べ 替 え る ア ル ゴ リ ズ ム1.1な で あ っ た り,xnを
計 算 す る ア ル ゴ リ ズ ム1.2の
あ っ た りで あ る.た
と え ば,1+2+…+nを
回 の 足 し算 を す る 必 要 が あ り,n(n+1)/2と り 算1 回 と,n
の よ う に 計 算 量 は,n
が,n
の 関 数f(n)と
問 題 に な る.ま
た,n
た,
の 大 き さそ の もの で
し て 求 め る に は 足 し算1 回,掛
数 関 数3 と い う よ う に,入
算 量 を 比 較 す る と き は,そ
よ う な 項 が で て く る の か,定
の 多 項 式 に な る な ら,何
け 算1
つ で も3 回 の 演 算 で で き る. こ
か,定
し て 表 さ れ る.計
の 多 項 式 な の か,2nの
で あ っ た り,ま
こ の ま ま,1 つ1 つ 足 す と,n-1
の 大 き さ に 関 係 な く,い の1 次 関 数n-1と
力 され る もの の 個 数
と き に はn
力 さ れ る 数n
算
力 さ れ た もの を大
ど の よ う に,入
を 因 数 分 解 す る と か で あ れ ば,入
の サ イ ズn
の 値 は,順
記 法
ア ル ゴ リ ズ ム の 性 能 を 評 価 す る と き は,ふ
回,割
果 と
な る.
自 然 数n
い う操 作 を し て お り,結
力
の関数
数 な の か,な
どが
次 式 に な るの か が 大 き な関 心 に
な る. 0 以 上 の 整 数n n0が
の 関 数f(n)がO(g(n))で
存 在 し て,n0以
上 のn
あ る と は,正
の 定 数c
と 自然 数
に 対 し て,
f(n)〓cg(n) が 成 り立 つ こ と と 定 義 す る.こ
れ を 大 き いO
た と え ば,f(n)=an2+bn+cはO(n2)で が,O(n2)で
notation)と
い う.
あ る.f(n)はO(n3)で
あ る と い っ た ほ うが 精 密 で あ る.f(n)が2
明 記 し た い が,n で あ る,な
記 法(big O
もある
次 式 で,n2の
係 数a
を
の 係 数 や 定 数 項 は あ ま り重 要 で な い と き,f(n)はan2+O(n)
ど と い う こ と も あ る.
あ る ア ル ゴ リ ズ ム の 計 算 量 はO(log2n)で い う の で あ る が,n
あ る と か,O(n3/2)で
の 増 え 方 に 従 っ てlog2n,n2,2nな
あ る,な
どと
どが お よ そ どの よ う に
増 え る か を表 に す る と次 の よ う に な る. 表1.1 n の 増 分 に対 す る 各値
2 整
数
に
つ
い
て
コ ン ピ ュ ー タ の 中 で は 数 は 2進 数 で 表 さ れ て い る と い う こ と を 聞 い た こ と が あ る 読 者 も多 い こ と だ ろ う.こ 有 無,ス
れ は,簡
イッ チ の オ ン オ フ な ど,2
成 り立 っ て い て,そ
ン ピ ュ ー タ は,電
圧 の
つ の 状 態 に よ り情 報 が 表 現 さ れ る 部 品 か ら
れ ら の 2 つ の 状 態 を そ れ ぞ れ1,0
,0 の 組 み 合 わ せ に よ り,コ こ の 章 で は,整
単 に い う と,コ
と い う 値 に 対 応 さ せ て,1
ン ピ ュ ー タ の 状 態 を 表 現 す る か ら で あ る.そ
数 の 2 進 表 現 か ら 始 め る.そ
し て,最
こ で,
大 公 約 数 や 素 数 に関 す る
基 本 的 な ア ル ゴ リ ズ ム を 紹 介 し よ う.
2.1
2.1.1
10進
数,2
進 数,そ
して β 進 数
整 数 の 2進 表 現
数 は,普 通10進
数 で 表 され て い る.整
数 を10進
数 と し て 表 す と き は,1=100,
10=101,100=102,1000=103,10000=104,…
が そ れ ぞ れ い くつ ず つ あ
る の か を,0 か ら 9 ま で の 数 字 を 用 い て 右 か ら順 に 並 べ る.た
5×103+0×102+6×101+7×100
で あ り,100が い る.こ
7個,101が6
の と き,普
通 は,"1
が 5"と い う の だ が,こ 103の
と え ば,5067は
個,102が0
個,103が
の 位 が 7,10の
こ で は,"100の
5個 あ る こ と を 表 し て
位 が 6,100の
位 が7,101の
位 が0,1000の
位 が 6,102の
位
位 が0,
位 が 5"と い う こ と に す る.
10進 数 と 同 じ よ う に 考 え て,0
と 1 を 用 い て,20,21,22,…
つ あ る か を 右 か ら 順 に 並 べ る.た
と え ば,101011は
がそれ ぞれい く
1×25+0×24+1×23+0×22+1×21+1×20
を 表 し て い る こ と に な る.こ "20の
位 が 1 ,21の
の よ う な 数101011を
位 が 1,22の
位 が 0,23の
1"と い う こ と に す る.2 進 数101011を10進
101011=1×25+0×24+1×23+0×22+1×21+1×20
=1×32+0×16+1×8+0×4+1×2+1×1
=43
2 進 数 と い う.こ
位 が 1,24の
の と き,
位 が 0,25の
数 で 表 せ ば43で
位 が
あ る . な ぜ な ら,
(2.1)
だ か ら で あ る. 1 つ の 数 を10進
数 や 2進 数 で 表 す と き,10進
数 を そ の 数 の10進
数 を 2 進 表 現 と い う こ と に す る . 特 に 断 ら な い と き は,数 れ て い る と す る.ま は,(43)10,(101011)2の
た,10進
は10進
表現
2進
表現 で表 さ
表 現 か 2進 表 現 か を は っ き り示 す 必 要 が あ る と き よ う に,そ
の 数 に 添 え 字 を つ け て 表 す.ま
こ を 書 か な く て も 混 乱 し な い と き は,4310,1010112の
た,か
っ
よ う に 簡 略 に 表 す .10
進 数 の 添 え 字 は 省 略 す る こ と も多 い .
2.1.2
β 進 数
整 数 の 2 進 表 現 の 一 般 の 形 は,
±1×2u+du-1×2u‐1+…+d1×21+d0×20
で あ る.た
だ し,
du-1,…,dl,d0は
そ れ ぞ れ 0 また は 1
で あ る.こ の と き,こ の 数 の 2進 表 現 の,"2uの の 位 はd0で
あ る"と
い い,こ
位 は 1,2u-1の
の 数 の 2 進 表 現 は(dudu
位 はdu-1,…
-1…d2d1)2で
い う. 全 く 同 じ よ う に β を 2以 上 の 整 数 と す る と,整
±du×
βu+du-1×
βu-1+…+dl×
数 の β 進 表 現 と は,
β1+d0×
β0
,20 あ ると
の こ と で あ る.た
duは1
だ し,
以 上 β-1以 du-1,…,d1,d0は
で あ る.こ
下 の 整 数, そ れ ぞ れ0 以 上 β-1以
の 数 の β 進 表 現 の,"βuの
位 はdl,β0の
位 はd0で
あ る"と
下の整数
位 はdu,βu-1の
い い,β
位 はdu-1,…,β1の
進 表 現 は(dudu-1…d2d1)β
で あ
る と い う. β を 基 数(radix)ま
た は 底(base)と
い う.β
進 表 現 され て い る数 を β 進 数
と い う.
例2.1
10進
数59の3
進 表 現 を 求 め て み よ う.
5910=2×27+3+2
=2×33+0×32+1×31+2×30
で あ る か ら,5910の3
進 表 現 は20123で
2.1.3
あ る.
2進 数 へ の 変 換
2 進 表 現 され て い る 整 数 を10進
表 現 に す る こ と は,式(2.1)で1010112=4310
で あ る こ と を 示 した と き の よ う に,直 2 進 表 現 を8 進 表 現 に し て か ら,そ
接 計 算 す れ ば よ い. れ を10進
表 現 に す る と い う こ と が よ く行
わ れ る. 2 進 表 現 か ら8 進 表 現 を 得 る の は 簡 単 で あ る.た 進 数 を,右
か ら3 桁 ず つ 区 切 っ て,8=23だ
と え ば,1010112と
か ら,
101011=(1×25+0×24+1×23)+(0×22+1×21+1×20)
=(1×22+0×21+1×20)×23+(0×22+1×21+1×20)
=5×81+3×80
と 表 せ ば,53が1010112の8
進 表 現 と い う こ と に な る.つ
1010112=538
ま り,
い う2
で あ る. 整 数 の 2 進 表 現 か ら16進 じ よ う に 考 え て,2
表 現 へ 変 換 す る に は,16=24だ
か ら,上
進 表 現 の 右 か ら 4 桁 ず つ 区 切 っ て み れ ば よ い.た
と同
と え ば,
10101111102は
10101111102=1
0111
1110
=1×28
+(0×27+1×26+1×25+1×24)
+(1×23+1×22+1×21+0×20)
=1×162
+(0×23+1×22+1×21+1×20)×161
+(1×23+1×22+1×21+0×20)×160
=1×162+7×161+14×160
で あ る . こ こ で,10101111002の16進 162の
係 数14,161の
係 数 7,
係 数 1 を 右 か ら 並 べ れ ば よ い の だ か ら,
1714
と な る こ と に な る が,160の しい.そ に,そ
表 現 は,160の
こ で,16進
位 の14は10進
数 で あ っ て,こ
こで 使 うに は お か
表 現 で は,1010,1110,1210,1310,1410,1510を
れ ぞ れ,A,B,C,D,E,F
を 用 い る.し
表すの
た が っ て,1410はE16だ
か ら,
10101111102=17El6
の よ う に 表 す. た と え ば,ABCD16は,10進
表現で は
10×163+11×162+12×161+13×160=43981
であ る. 次 に10進
表 現 を 2進 表 現 に 変 換 す る 仕 方 を 考 え よ う.あ
る 整 数 n の 2進 表
現 が,(dudu-1・
・dld0)2で
あ る と す る と,
n=du×2u+du-1×2au-1+...+d1×21+d0×20
で あ る か ら,n
を 2 で 割 る と,商
で,そ
が
du×2u-1+du-1×2au-2+...+d1×20
の と き の 余 り と して,d0を
り がd1で
あ る.商
(2.2)
得 る.さ
を 2 で 割 る こ と を,商
に 各 位 の 数 字d0,d1,…,du-1で,商
ら に,こ
の 商(2.2)を
2で 割 っ た 余
が 1に な る ま で 続 け れ ば,余
りが 順
が 1 に な っ た と き そ の 1が 最 上 位 の 数du
で あ る.
ア ル ゴ リ ズ ム2.1:10進 入 力:10進 出 力:n
表 現 を 2進 表 現 へ
数 n の 2進 表 現dudu-1…d1
ステ ツ フ: (1) i←0 (2) q←n (3) q≠1の
間,次
d2←(q
q←(q
を行 う を 2 で 割 っ た 余 り)
を 2 で 割 っ た 商)
i←i+1 (4) u←i (5) du←1 (6) dudu-1…d1を
実 際 に は,次
例2.2
10進
出力
の よ う に して,10進
数41の
2進 表 現 は
表 現 を 2 進 表 現 に 変 え る こ と が 多 い.
2)41
2)20余
り 1 …
20の
係数
2)10余
り 0 … 21の
係 数
2)5
余 り 0 … 22の
係 数
2)2
余 り 1 … 23の
係 数
1 余 り 0 … 24の
係 数
↑
25の
と な る こ と か ら,1010012で
2.2
係 数
あ る.
累 乗 の 計 算 の ア ル ゴ リ ズ ム:2
第 1章 で,x7を
進 表 現 を利 用 し て
計 算 す る と き,
x7=(x2×x)2×x で あ る こ と を 用 い て 計 算 す る ア ル ゴ リ ズ ム を 紹 介 し た.実 2進 表 現 と 密 接 に 関 係 し て い る.一
般 に,x
す る と き,xnを
を 順 々 に 掛 け てx2,x3,…xnを
計 算 す る の に,x
ル ゴ リ ズ ム は 次 の よ う に 書 け る.
ア ル ゴ リ ズ ム2.2:累 入 力:実
数x,2
乗 の 計 算(素 朴 な 方 法)
以 上 の 整 数n
出 力:y=xn ス テ ッ プ: (1) y←x (2) i←2 (3) i〓nで
あ る 間 次 を行 う
y←y×x i←i+1
を 実 数 と し,n
は,こ
れ は 指 数 7の
を 2以 上 の 整 数 と 求 める ア
xn'=
(4) yを 出 力
こ の ア ル ゴ リ ズ ム で は,掛 2以 上 の 整 数n
け 算 はn-1回
行 わ れ る.
が2k〓n<2k+1の
と き,n
の 2進 表 現 は
n=(1dk-1dk-2…dld0)2
と 表 さ れ る.こ
こ で,k〓1で
あ り,di(0〓i〓k-1)は
0 ま た は 1で あ る .
n'を
n'=(1dk-1dk-2…d1)2
と す る と,n=n'×2+d0な
の で,実
数x
に 対 し て,
(xn' )2 (x n')2×x
xn =xn'×2+d0=xn'×2×xd0=
(d0=0の (d 0=1の
と き) と き)
で あ る . 同 じ よ う に n"を
n"=(1dk-1dk-2…d2)2
と す る と,n'=n"×2+dlな
の で,
で あ る . こ の こ と か ら,次
(xn")2
(d
(xn")2×x
(d1=1の
l=0の
と き) と き)
の よ う な ア ル ゴ リ ズ ム でxnが
か る.
ア ル ゴ リ ズ ム2.3:累 入 力:実
数x,2
出 力:b0=xn ス テ ツ プ: (1) bk←x (2) i←k-1
乗 の 計 算(指
以 上 の 整 数n
数 の 2 進 表 現 を 使 っ て)
の 2 進 表 現(1dk-1dk-2…dld0)2
計 算 で きる こ とが わ
(3) i〓0で
あ る 間,次
di=0の
を行 う
とき
bi←bi+12
d2=1の
とき
bi←bi+12×x
i←i-1 (4) b0を
n
出力
の 2 進 表 現 が(1dk-1dk-2…dld0)2と
い う こ と は,2k〓n<2k+1で
あ り,
k=[log2n]
と い う こ と で あ る.こ ズ ム で,掛
こ で,[x ] はx
け 算 は,di=0な
の アル ゴ リ
らば
bi←bi+12
に お い て,bi+12=bi+1×bi+1と
以 下 の 最 大 の 整 数 を 表 す.上
し て,1
回,di=1な
ら ば
bi←bi+12×x
に お い て,2 で,ア
回 行 う.ま
た,i
はk-1,k-2,…,1,0
ル ゴ リ ズ ム 全 体 で は,n=(11…1)2の
多 く,そ
の 回 数 は,2k=2[log2n]
と2.3に
つ い て 次 の こ と が 成 り 立 つ.
性 質2.1
ア ル ゴ リ ズ ム2.2で
のk と き,掛
回 で あ る.し
は,n-1回
お い て 実 行 さ れ る 掛 け 算 の 回 数 は2log2n以
通 りの 値 を と る の
け 算 をす る回 数 が 最 も
た が っ て,ア
掛 け 算 を 行 う.ア 下 で あ る.
ル ゴ リ ズ ム2.2
ル ゴ リ ズ ム2.3に □
2.3
2.3.1
コ ン ピュ ー タの 内部 での 整 数 の表 現
整 数 の表 現
計 算 機 の 内 部 で は,数 る."計
は 有 限 桁 の 2 進 数 か16進
算 機 の 内 部 で は"と
い う の は,"プ
ロ グ ラ ム な ど を 実 行 し た と き に,そ
の プ ロ グ ラ ム の 中 で 与 え ら れ て い る 数 値 や,キ ら デ ー タ と し て10進 は"と
数 で 表 され る の が 普 通 で あ
ー ボ ー ドか ら ま た は フ ァ イ ル か
数 で 与 え られ る 数 値 が 計 算 機 に よ っ て処 理 さ れ る と きに
い う 意 味 で あ る.整
数 が 計 算 機 の 内 部 で ど の よ う に 表 さ れ る か,最
も一
般 的 な パ ソ コ ン や ワ ー ク ス テ ー シ ョ ン で 使 わ れ て い る 2進 数 の 場 合 を 考 え よ う. 2進 数 1桁 を 1 ビ ッ ト(bit)と
い う.bitはbinary
digitを
略 し た も の で,2
進 数 の 1桁 と 同 じ情 報 量 を も つ 情 報 の 単 位 と し て も使 わ れ る. 計 算 機 の 内 部 で は,定 り,記
め ら れ た 長 さ の ビ ッ トの 列 を 1単 位 と し て,計
憶 装 置 に 読 み 書 き す る.こ
と い う.1 語 の 長 さ は,コ
算 した
の 定 め ら れ た 長 さ の ビ ッ ト列 を 1 語(word)
ン ピ ュ ー タ に よ る が,32ビ
ッ トま た は64ビ
ッ トの
も の が 多 い. コ ン ピ ュ ー タ の 内 部 で 整 数 が ど の よ う に 表 さ れ る か を 考 え よ う .32ビ 64ビ
ッ トで 例 を示 す と 煩 雑 に な る の で,こ
列 で 例 示 す る こ と が 多 い.た ば,表2.1の
よ う に24=16個
と え ば,1
ッ トや
の 本 で は 4 ビ ッ ト程 度 の 短 い ビ ッ ト
語 を 4 ビ ッ ト とす る と,単
純 に考 え れ
の 整 数 を 表 す こ と が で き る.表2.1で,ビ
ッ ト
パ タ ー ン と い う の は 各 語 の ビ ッ ト列 を 具 体 的 に 書 き 出 し た も の で あ る. 表2.1で
は,負
な い が,負
の 整 数 も扱 う と き は くふ う が 必 要 に な る .
の 整 数 が な い.0
す ぐ に 思 い つ くの は,最 正,1
以 上 の 整 数 だ け を扱 うの な ら こ れ で か まわ
初 の 1 ビ ッ ト を符 号 の た め に 使 っ て,そ
な ら 負 と す る と い う 方 法 で あ る.た
+1 を1001は-1 が,整
を 表 す,と
す る の で あ る.こ
ッ トパ タ ー ン が0001は
の 方 法 は原 理 的 に は 簡 単 で あ る
数 を 表 す と き に は ほ と ん ど使 わ れ な い.
普 通 は 2 の 補 数 と い う も の を 使 う.た う に,ビ 710を
と え ば,ビ
れが 0な ら
ッ トパ タ ー ン が0000か
表 す と し て,ビ
ら0111ま
ッ トパ タ ー ン1000か
と え ば,4 で は,そ ら1111ま
ビ ッ トの と き,表2.2の
よ
の ま ま,そ
ら
で は,そ
れ ぞ れ010か
れ を 2進 表 現 と
表2.1
4ビ
ッ トの 整 数(符 号 を考 え な い)
み た と き に 正 の 整 数 n を 表 し て い る と き,負 つ ま り,ビ
ッ トパ タ ー ン1000を
の 整 数n-24を
2進 表 現10002と
タ ー ン1000は23-24=-8を
表 す,と
タ ー ン1001は,10012=23+1だ
み れ ば23だ
す る の で あ る.同
一 般 に,整
き,n-2kを
ツ トパ
ビ ッ トの 2 進 数 で 表 す と き,最
上 位 ビ ッ トが 1の も の は,そ
表 す と す る.こ
し た が っ て,0111な
じ よ う に ビ ッ トパ
ようになる.
数 を 1語 の 長 さ がk
現(2'scomplement)と
ッ トパ
か ら24-1-24=-1
つ ま り最 も左 側 の ビ ッ トが 0 で あ る も の は,そ そ の ま ま 表 し,最
か ら,ビ
か ら(23+1)-24=-7を,…,ビ
タ ー ン1111は11112=23+22+21+20=24-1だ を 表 す と して,表2.2の
表 す も の と す る.
上 位 ビ ッ ト,
れ を 2進 表 現 と み て,表
す数 を
れ を 2 進 表 現 した らn で あ る と
の よ う に し て 負 の 整 数 を 表 す 表 し方 を 2 の 補 数 表
い う. ど と書 か れ て い る と き は ビ ッ トパ タ ー ン と 2進 表 現 と 同
じ も の と み る こ と が で き る が,1011な
ど と書 か れ て い る場 合 は そ う考 え る わ け
に い か な い の で,2 進 表 現 と 区 別 す る た め に,こ う こ と ば を 使 い,2 進 表 現 に は 原 則 と し て,添
の 本 で は,ビ
ッ トパ タ ー ン と い
え 字 の 2 を 書 く よ う に し て い る.
2 の 補 数 表 現 を 求 め る に は 次 の よ う に す れ ば よ い.
表2.2
性 質2.2 1 -nを
語 の 長 さ がk
表 すk
ビ ッ トの と き,2k-1以
下 の 正 の 整 数n
ビ ヅ トの 2 の 補 数 表 現 を 求 め る に は
を 反 転 さ せ,そ こ こ で,ビ
4 ビ ッ トの 整 数(負 の 数 は 2 の補 数)
に 対 し て,
,n
の 2進 表 現 の 各 ビ ッ ト
な ら ば l に,1
な ら ば 0 に 置 き換 え る
れ に 1 を 加 え れ ば よ い. ッ トを 反 転 さ せ る と は,0
こ と で あ る.
証 明 2k-1以 2kと
下 の 正 の 整 数n
な る m のk
て,n
と m
に 対 し て,-nの
2 の 補 数 表 現 と は,-n=m-
ビ ッ ト 2 進 表 現 で あ る こ と か ら,m=2k-nで
っ
を 加 え る と,
n+m=2k
(2.3)
で あ る.一 る と,k
あ る.よ
方,n
のk
ビ ッ ト 2進 表 現 と,そ
ビ ツ トす べ て が 1 と な る か ら,そ
に 等 し い.つ る よ う にn
の各 ビ ッ トを反 転 した もの を加 え
の 数 は,
2k-1+2k-2+…+22+21十20=2k-1 ま り,-nの のk
2 の 補 数 表 現 は,式(2.3)と
(2.4) 式(2.4)を
比 べ る とわ か
ビ ッ ト 2 進 表 現 の 各 ビ ッ ト を 反 転 し た も の よ り 1大 きい.し
た が っ て,-nの
2の 補 数 表 現 を 求 め る に は,n
のk
ビ ッ ト2進 表 現 の 各 ビ ッ
ト を 反 転 し た も の に 1 を 足 せ ば よ い.
例2.3
□
た と え ば,1 語 の 長 さ が 4 ビ ッ トの と き,整
で あ る.各
ビ ッ ト を 反 転 さ せ る と,1001と
表 現 は10012に00012を
こ こ で,ビ
加 え,1010と
数 6の 2進 表 現 は,01102
な る . し た が っ て,-6の
2の補 数
な る.
ッ トを 反 転 して 1 を 加 え る と い う操 作 を よ く 見 て み る と,2
の補
数 表 現 を 求 め る に は 次 の よ う に し て も よ い こ と が わ か る.
性 質2.3
1 語 の 長 さ が k ビ ッ トの と き,2k-1以
-nを 表 すk ビ ッ ト(20の
ビ ッ トの 2 の 補 数 表 現 を 求 め る に は,n 位)か
ら,順
の ま ま に し て お い て,そ
例2.4
下 の 正 の 整 数n
に 対 し て,
の 2進 表 現 を最 も右 の
に 左 の ビ ッ ト を 見 て い き,最
初 に現 れ る 1 まで は そ
れ よ り上 位 の 各 ビ ッ トを 反 転 さ せ れ ば よ い.
た と え ば,610は01102だ
か ら,一
の ビ ッ トの 1 は そ の ま ま に して お い て,右 番 目 の ビ ッ トの 0 を 1 に 置 き換 え て,得
□
番 右 の ビ ッ トの 0 と 右 か ら 2番 目 か ら 3 番 目 の ビ ッ トの 1 を 0 に,4
ら れ る1010が-6の
2の補 数 表 現 と
な る の で あ る.
現 在 の パ ソ コ ン や ワ ー ク ス テ ー シ ョ ン で 多 く 使 わ れ て い る 1語 の 長 さ が32 ビ ッ トの 場 合 に,1 32ビ
語 で 表 す こ と の で き る 整 数 の 範 囲 を 求 め て お こ う.
ッ トの 整 数 で,負
の 整 数 は 2 の 補 数 で 表 さ れ て い る と き は,
か ら か ら
を 表 す こ と が で き る.
まで の 0以 上 の 整 数 と, まで の 負 の 整 数
例 題2.1 64ビ ッ トの 整 数 で,負 の整 数 は 2の 補 数 で 表 さ れ て い る と き,表 す こ との で きる 整 数 の 範 囲 を求 め よ. 解 答 32ビ ッ トの整 数 と 同 じ よ うに 考 えて, か ら
ま で の 0以 上 の 整 数 と,
か ら
ま で の 負 の整 数
を 表 す こ とが で きる.
2.3.2
□
整 数の加減 算
前 項 で み た よ う に,コ
ン ピュ ー タで は,扱
え る整 数 には 範 囲 が あ る の で,足
し算 を す る と きな ど注 意 しな い と,意 外 な こ とが 起 こ る こ とが あ る.負 の 整 数 は 2の 補 数 で 表 す と き,足
し算 や 引 き算 は ど う な る か を,1 語 の長 さが 4 ビ ッ
トの と き を例 に と りなが ら,考 え て み よ う.
0001+0101=0110の
よ う に,0 以 上
の 整 数 の 足 し算 で 和 が0111以
下 になる も
の は 問 題 な く正 し い 値 を得 る.
0101+0011=1000だ
か ら,2
表 現 で は1000は-810に
なっ て し ま うた
め,正
の補 数
し い 結 果 を 得 る こ と が で き な い.
(-4)10+610=1100+0110=10010 と な る が,1
語 の 長 さ は 4 な の で,右
4桁 し か 考 え ら れ な い.し ら 5桁 目 の,つ れ て,0010=2と
か ら
た が っ て,右
か
ま り一 番 左 の 1は 無 視 さ 正 し く計 算 で き る.
引 き算 は 符 号 を変 え て 足 す こ と と 同 じ だ か ら710-310=710+(-3)10= 0111+1101=10100と
な る が,右
4桁 しか 考 え ら れ な い の で,つ の 1は 無 視 さ れ て,0100=42と
か ら
ま り一 番左 な り,結
果 は 正 し く な る.
(-3)10-410=(-3)10+(-4)10= 1101+1100=11001と
な る が,一
の 1は 無 視 さ れ て,1001=-7と
番左 正 し く
計 算 で き る.
(-7)10-(3)10=(-7)10+(-3)10= 1001+1101=10110で
あ る が,最
上位
の ビ ッ トは 無 視 さ れ て,0110=(6)10と な っ て 正 し く計 算 で き な い.
こ の よ うな 整 数 の 表 し方 と足 し算 の 関 係 は,次 の よ うな 図 にす る とわ か りや
図2.1
整 数 の 2 の 補 数 表 現 と足 し算 の 関 係(4 ビ ッ トの例)
す い.図2.1で,+1す
る と右 回 り に 1つ ず つ,-1す
る と 左 回 り に 1つ ず つ ず
れ て い く.
a.
2.4
桁 数 の 多 い整 数 の 演 算
桁 数 の 多 い整 数 の 演 算 に くふ うが 必 要 な こ と
前 項 で 述 べ た よ う に,1 語 の 長 さ は32ビ で 表 す と す る と,表 あ る.こ
れ は,そ
りは 小 さ い . た と え ば,20=1か
に 対 し て,2n=2n-1×2と て 計 算 す る と,230は と 正 し く な くな る.こ
の 数 は 2の補 数
す こ と の で き る 最 大 の 整 数 は,231-1=2147483647で
れ ほ ど 大 き な 数 で は な く,12!=479001600よ
13!=6227020800よ
と な り,こ
ッ トで あ る と き,負
り は 大 き い が, ら始 め て,n=1,2,…
して 2の 累 乗 を 求 め る単 純 な プ ロ グ ラム をつ くっ 正 し く1073741824と れ は,230は
計 算 さ れ る が231は-2147283648
2進 表 現 で
れ に 2 を 掛 け る と 各 ビ ッ トが 左 へ 1つ ず つ シ フ ト し て,
と な る.こ れ は,最 上 位 ビ ッ トが 1な の で 2の補 数 表 示 で は231-232=-2-31 を表 して い る わ け で あ る. そ こ で,桁 数 が 多 い 数 の 計 算 を す る には,何 ない.コ
らか の くふ う を しな け れ ば な ら
ン ピ ュ ー タで の 実 数 の扱 い は次 章 で 説 明 す る が,コ
ンピュータでは整
数 しか扱 え ない わ け で は な く,実 数 も扱 え る し,実 数 は 整 数 よ りは 非 常 に多 く の 桁 数 の計 算 もで き るの で 整 数 の範 囲 とい う狭 苦 しい とこ ろ で は な く,実 数 の 範 囲 で計 算 す る の も もち ろ ん 1つ の 方 法 で あ る.そ れ で も,や は り扱 え る数 の 範 囲 に は 限 界 が あ る.こ
こで は,桁 数 の多 い 整 数 の 演 算 につ い て基 本 的 な方 法
を説 明 し よ う.こ の 基 本 的 な 方 法 は,別 に 難 しい こ と を行 うわ け で は な く,ふ つ う 1桁 ず つ 行 う計 算 を何 桁 か ず つ ま とめ て行 う だ け で あ る. こ こで桁 数 が 多 い とい うの は,2 語 以 上 使 わ な け れ ば表 現 で きな い数 の こ とで
あ る . そ の よ う な 数 を 多 倍 長 数(multiprecision て,1 語 で 表 現 さ れ て い る 数 を 単 精 度(sigle タ で 多 倍 長 数 を 扱 う に は,配 な け れ ば な ら な い が,そ
number)と
precision)の
い う.こ
れ に対 し
数 と い う. コ ン ピ ュ ー
列 と よ ば れ る も の を 使 う な ど し て 表 現 を くふ う し
れ は プ ロ グ ラ ミ ン グ の 本 な ど に 譲 る こ と に す る.多
倍
長 数 の 演 算 を 多 倍 長 演 算 と い う. b. 多 倍 長 整 数 の 足 し 算 ま ず 足 し算 か ら始 め よ う.た
と し て,A+Bを
と え ば,
A=68719476736
(=236)
B=17179869184
(=234)
求 め る こ と を 考 え る.A
もB
も 長 さ32ビ
ッ トの1 語 で 表
す こ と は で き な い. こ こ で は,い A+Bを
わ ゆ る 筆 算 の 拡 張 に よ る 方 法 を考 え よ う.
手 で 足 し算 す る と き は,1
足 し算 の 結 果 の1 の 位 を0 と し,10の て12な
の で10の
で9,繰
位 は2,100の
の 位 の6 と4 を 足 し,そ
位 の3 と8 と 繰 り上 が りの1
位 は6 と9 を 足 して5,…
1の 位 か ら1 桁 ず つ 繰 り 上 が り を 考 え な が ら 足 し て い く.こ
が,10進5
で 掛 け 算 を す る と き に,16ビ
下 で,10進4
桁 の 数 を2 つ 掛 け た と き は32ビ
手 順 は 次 の よ う に な る. を1 の 位 か ら4 桁 ず つ 区 切 っ て,
A3←6736
A2←1947 Al←687
と す る.
とい う よ うに
れ をそ の ま ま実 現
ッ ト の2 進 数 の 最 大 数
桁 の 数 を2 つ 掛 け て も32ビ
で あ る.
1) A
と を足 し
う 少 し ま と め て,4 桁 ず つ で 同 じ よ う な こ と を す る.4 桁
に し た 理 由 の1 つ は,後 216-1=65535以
の で,
位 は7 と1 と 繰 り上 が りの1 を 足 す と9 な の
り 上 が り は な い の で1000の
し て も よ い の だ が,も
れ が10な
ッ トで 表 さ れ る
ッ トで は 表 せ な い こ と が あ る か ら
2) B
を1 の 位 か ら4 桁 ず つ 区 切 っ て,
B3←9184
B2←7986
B1←171
と す る.
3)
c←0と
し て お く.
4) C3←(A3+B3+cの
下 位4 桁)
A3+B3+c〓9999な
A3+B3+c〓10000な
と す る.
ら ばc←0 ら ばc←1
こ の と き は,A3+B3+c=15920な
の で,C3=5920,c=1で
5)
C2←(A2+B2+cの
下 位4 桁)
A2+B2+c〓9999な
ら ばc←0
A2+B2+c〓10000な
と す る.
こ の と き は,A2+B2+C=9934な
6)
C1←(Al+B1+cの
下 位4 桁)
Al+B1+c〓9999な
ら ばc←0
A1+B1+c〓10000な
と す る.
こ の と き は,A1+B1+c=858な
7)
C0←cと
こ の と き は,c=0で
ら ばc←1
あ る.
ら ばc←1
の で,C1=858,c=0で
あ る.
あ る.
と き は,C1,C2,C3を,C0=1の に,左
85899345920と
と き は,C0,C1,C2,
か ら並 べ て 得 ら れ る 数 が,A+Bで
こ の と き は,c=0な
最 後 は,本
の で,C2=9934,c=0で
す る.
8) C0=0の C3を,順
あ る.
あ る.
の で,A+B=C1×108+C2×104+C3= な る.
当 は,cl×108+C2×104+C3は1
れ が 扱 え る よ う に くふ う が 必 要 に な る が,本
語 で は 表 せ な い の で,そ 書 で は,そ
の 具 体 的 な 方 法 に はふ
れ な い こ と に す る. 要 す る に,次
の よ う に し て い る の で あ る.
一 般 に は次 の よ う に す る こ とに な る .
ア ル ゴ リ ズ ム2.4:多 入 力:10進
倍 長 整 数 の 足 し算
表 現 で 与 え ら れ た 多 倍 長 整 数A,B
出 力:A+B ス ア ツ フ: (1) 正 の 整 数A,B
k=1,2,3な
の 桁 数 の 多 い ほ う の 桁 数 を4n+kと
す る
らば
N←n+1 k=0な
らば N←n
(2) A を 1の 位 か ら 4桁 ず つ 区 切 っ て,順 つ き た ら そ れ 以 降 のAi,Ai-1,…Alは (3) B を 1の 位 か ら 4 桁 ず つ 区 切 っ て,順 つ き た ら そ れ 以 降 のBj,Bj-1,…,B1は (4) c←0 (5) i←N
に,AN,AN-1,…
と し,桁
数 が
と し,桁
数 が
0 と す る. に,BN,BN-1,… 0 と す る.
(6) i〓1で
あ る 間,次
Ci←(Ai+Bi+cの
下 位 4桁)
Ai+B2+c〓9999な
を行 う
らば
c←0 Ai+Bi+c〓10000な
らば
c←1
(7) C0←c (8) C0=0な
らば
A+B=C1×10000N-1+C2×10000N-2+…+CNを C0=1な
出力
らば
A+B=C0×10000N+Cl×10000N-1+C2×10000N-2+...+CN を出力
例2.5
A,B
を
A=9999876543210987
B=123465439102
と す る.
A は16=4×4桁,B Ai,Bi,c,Ciを
は12桁
だ か ら,N←4と
表 に す る と次 の よ う に な る.た
A0の 値 を 表 し,c の 行,1
の 列 はi=1の
した が っ て,
A+B=10000000008650089 表2.3
す る. と え ば,A
と き のcの
の 行,0
値 を表 す.
の列が
を 得 る. c. 多 倍 長 整 数 の 引 き 算 足 し算 と 同 じ よ う に 考 え て,多 の よ う に す る こ と が で き る.簡
ア ル ゴ リ ズ ム2.5:多 入 力:10進
倍 長 の 正 の 整 数A,B 単 の た め にA〓Bと
の 引 き 算A-Bも
次
す る.
倍 長 整 数 の 引 き算
表 現 で 与 え ら れ た 多 倍 長 整 数A,B.た
だ しA〓Bと
す る
出 力:A-B ス テ ッ プ: (1) A〓Bな
の で,A
k=1,2,3な
の 桁 数 を4n+kと
す る.
らば
N←n+1
k=0な
らば
N←nと
す る.
(2) A を 1の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) B を 1の 位 か ら 4桁 ず つ 区 切 っ て,順
つ き た ら そ れ 以 降 の 、Bj,Bj-1,…,B1は
(4) b←0 (5) i←N (6) Ai〓Biな
らば
Ci←Ai-Bi-b
b←0
Ai<Biな
らば
Ci←10000+Ai-Bi-b
b←1
(7) i〓2な
らば
i←i-1
ス テ ッ プ(6)を
i=1な (8) C1≠0な
行 う
らば 次 へ 進 む らば
に,AN,AN-1,…Alと に,BN,BN-1,… 0 と す る.
す る. と し,桁
数が
A-B=C1×10000N-1+C2×10000N-2+…+CNを
出 力
C1=…=Ce=0(1〓l<N)な A
ら ば
-B=Ce+1×10000N‐(e+1)+…+CNを
C1=…=CN=0な A
ら ば
-B=0を
列2.6 A, B
出 力
出力
を
A=1234567890123
B=987664321012
と す る. ●A
は13=4×3+1桁
だ か ら,N←3+1=4と
す る.
●A4←123,A3←6789,A2←2345,Al←1と ●
す る.
B4←1012,B3←6432,B2←9876,B1←0と ●b←0と
す る.
す る.
●i ←N,つ
ま り こ の 例 で は,i←4と
●A4=123,B4=1012で
す る.
あ り,A4<B4だ
10000+123-1012-0を
計 算
か ら,1000+A4-B4-b=
し,そ
の 結 果911をCiに
代 入 し,b=1
と す る. つ ま り,C4←9111,b←1と ●i
=4〓2な
す る.
の で ,i←i-1=3と
す る.
●A3=6789,B3=6432で
あ り,A3〓B3だ
6789-6432-1を
計 算 し,そ
つ ま り,C3←356 ●i=3〓2な
,b←0と
の 結 果911をCiに
10000+2345-876-0を
つ ま り,C2←2469,b←1と
す る.
す る. あ り,A2<B2だ 計 算 し,そ
と す る.
代 入 し,b=0と
す る.
の で,i←i-1=2と
●A2=2345,B4=9876で
か ら,A3-B3-b=
す る.
か ら,1000+A2-B2-b= の 結 果2469をCiに
代 入 し,b=1
●i
=20〓2な
の で,i←i-1=1と
●A1=1,B1=0で
す る.
あ り,Al〓B1だ
計 算 し,そ
の 結 果 0 をCiに
代 入 し,b=0と
つ ま り,C1←0,b←0と ●i
=1な
進 み ,C1=0(つ
ま り,l=1)な
の で
A-B=C2×100002+C3×10000+C4
す る.
す る .
の で ス テ ッ プ(8)へ
か ら,Al-B1-b=1-0-1を
=246903569111 を 出 力 す る.
2.4.1
多 倍 長 整 数 の 掛 け算
多 倍 長 の 正 の 整 数A,B 行 う こ と に し よ う.こ
の 掛 け 算 も 足 し算 と 同 じ よ う に,4
こ で は,簡
て 高 々 4桁 の 場 合 を 考 え よ う.B
単 の た め に,A
ア ル ゴ リ ズ ム2.6:多
数 と し
は 単 精 度 の 整 数 で あ る.
倍 長 整 数 の 掛 け算
入 力:10進
表 現 で 与 え ら れ た 多 倍 長 整 数A>0,
表 現 で 与 え ら れ た 高 々 4桁 の 整 数B>0
10進
桁ず つ区切 って
が 多 倍 長, B は10進
出 力:A×B ス テ ッ プ: (1) 正 の 整 数A
k=1,2,3な
N←n+1
k=0な
の 桁 数 を4n+kと
す る.
らば
らば
N←n
(2) A を 1 の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) c←0 (4) i←N (5) Ci←(Ai×B+cの
Ai×Bi+c〓9999な
下 位 4桁) らば
に,AN,AN-1,…,Alと
す る.
c←0 A2+Bi+c〓10000な
らば
c←(Ai×Bi+c-Ci)/10000
(6) i〓2な
らば
i←i-1
ス テ ッ プ(5)を
i=1な
行 う.
らば
C0←c
次 の ス テ ッ プ(7)へ
(7) C0=0な
進 む
らば
A×B=cl×10000N-1+C2×10000N‐2+…+CNを C0≠1な
出力
らば
A×B=C0×10000N+C1×10000N-1+…+CNを
B も多 倍 長 整 数 の と き は,B
出力
も 4桁 ず つ 区 切 っ て,上
の 区 切 っ た 1つ 1つ に つ い て 行 い,そ
と同 じよ うな計 算 をそ
れ ら を位 取 り に 注 意 し て,桁
数の多 い整
数 の 足 し算 を 行 う こ と に な る.
例2.7 A,B
を
A=1234567890123456
B=9876
と す る. ●A は16=4×4桁
だ か ら,N←4と
す る.
●A4←3456,A3←9012,A2←5678,Al←1234と
●
●c←0と
す る.
●i←4と
す る.
A4×B+c=3456×9876+0を 桁1456を
C4に 代 入 し,c←3413と
す る.
計 算 し,そ す る.
の 結 果34131456の
下位 4
●i=4〓2な
の で,i←i-1=3と
す る.
●A3×B+c=9012×9876+3413を 4桁5925を
計 算 し,そ
C3に 代 入 し,c←8900と
●i=3〓2な
計 算 し,そ
代 入 し,c←5608と
代 入 し,c←1219と
●C0=1219≠0な
計 算 し,そ
の で,C0←c=1219と
の 結 果12192592の
下位
す る.
●Al×B+c=1234×9876+5608を
●i=1な
下位
す る.
の で,i←i-1=1と
4 桁2592をC1に
の 結 果56084828の
す る.
●A2×B+c=5678×9876+8900を
●i=i〓2な
下位
す る.
の で,i←i-1=2と
4桁4828をC2に
の 結 果89005925の
す る. し て,ス
テ ッ プ(7)へ
進 む.
の で,
C0×100004+…+03×10000+C4=12192592482859251456 をA×Bと
2.4.2
して 出 力 す る.
多 倍 長 整 数 の 割 り算
多 倍 長 の 正 の 整 数A,B
の 割 り算A÷Bは,や
は り,4 桁 ず つ 区 切 っ て,多
倍 長 整 数 ど う し の 掛 け 算 や 引 き 算 を 組 み 合 わ せ て 行 え ば よ い わ け だ が,話 単 に す る た め に,A
が 多 倍 長 整 数 で, B は10進
を簡
数 で 高 々4桁 の場 合 だ け を考
え る こ と に す る.
ア ル ゴ リ ズ ム2.7:多 入 力:10進 10進
倍 長 整 数 の割 り算
表 現 で 与 え ら れ た 多 倍 長 整 数A>0, 表 現 で 与 え ら れ た 高 々 4 桁 の 整 数B>0
出 力:A÷Bの
商 と余 り
ス テ ッ プ: (1) 正 の 整 数A
k=1,2,3の
の 桁 数 を4n+kと
す る.
と きN=n+1,k=0の
(2) A を 1 の 位 か ら 4 桁 ず つ 区 切 っ て,順 (3) c←0
と きN=nと に,AN,AN-1,…,A1と
す る. す る.
(4) i←1 (5) Ai÷Bを
計 算 し,そ
の 商 をCiと
し,余
り を c と す る.
(6) i←i+1 (7) (c×10000+Ai)÷Bを (8) i〓N-1な
の 商 をCi,余
り を c と す る.
らば
ス テ ッ プ(6)へ
i=Nな
計 算 し,そ
戻 る
らば
次 の ス テ ッ プ(9)へ
(9) C1≠0な
進 む
らば
A÷B=C1×10000N-1+C2×10000N-2+…+CN余
り c を
出力 C1=0な
らば
A÷B=C2×10000N-2+C3×10000N-3+…+CN余
り c を
出力
例2.8
A=123456789012345をB=34で
●A
は15桁
割 る と 次 の よ う に な る.
な の で,4n+k=4×3+3で
あ り,N←n+1=3+1=4
と す る. ●A
を
1の 位 か ら 4桁 ず つ
A 2←4567,Al←123と ●c←0と ●i ←1と
●i←i+1と
り21だ
か ら,C1←3,c←21と
す る.
す る. り27だ
か ら,C2←6310,
り33だ
か ら,C3←8202,
す る. す る.
●(c×10000+A3)÷B=278901÷34=8202余 c←33と
す る.
す る.
●(c×10000+A2)÷B=214567÷34=6310余 c←27と
に,A4←2345,A3←8901,
し て お く.
●Ai÷B=123÷34=3余 ●i←i+1と
切 っ て,順
す る.
●(c×10000+A4)÷B=332345÷34=9774余 c←29と
り29だ
か ら,C4←9774,
す る.
●C1×100003+C2×100002+C3×10000+C4がA÷Bの
商 で あ り,c
が 余 り で あ る か ら,
123456789012345÷43=3631082029774余
り29
を 出 力 す る.
2.5.1
2.5
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
最 大公約数 の計算
2 つ の 自 然 数 の 最 大 公 約 数 を 求 め る ア ル ゴ リ ズ ム と して,ユ 助 法,ま
ー ク リ ッ ドの 互
た は ユ ー ク リ ッ ドの ア ル ゴ リズ ム と よ ば れ る も の が あ る.こ
れ は,次
の 性 質 を 利 用 す る.
性 質2.4
m,n
1〓r<nと
をm>nな
す る と,m
証 明 自然 数
m,n
る 自 然 数 と し,m=qn+r,q,r とn
の 最 大 公 約 数 と,n
,nと
す る.よ
っ て,r=m-qn=dm'-qdn'=d(m'-qn')と
す る と, m=dm',n=dn'を
数 で も あ る.つ
と r の 最 大 公 約 数 は 等 し い.
の 正 の 公 約 数 全 体 の 集 合 をDm,nで
d∈Dm
ま り,d∈Dn,rで
あ る.し
は 自 然 数,
表 す こ と に す る.
満 た す 自 然 数m',n'が
存 在
な り,d
は rの約
た が っ て,
Dm,n⊂Dn,r
(2.5)
ま た,d'∈Dn,rな ら ば,r=m-qn=d'm",n=d'n"を n"が 存 在 す る .よ っ て,m=(m-qn)+qn=d'm"+qd'n"=d'(m"+qn") と な り,d'は
m の 約 数 で あ る.つ
ま り,d'∈Dm
Dn,r⊂Dm,n ゆ え に,式(2.5)と
式(2.6)か
ら,
,nで
満 た す 自 然 数 m",
あ る.し
た が っ て, (2.6)
Dm,n=D,n,r が 成 り立 つ.し
た が っ て,Dm
,nの 最 大 要 素 で あ る m,n
の 最 大 公 約 数 と,Dn,r
の 最 大 要 素 で あ る n,r の 最 大 公 約 数 は 同 じ も の に な る.
自然 数 m
□
とn の 最 大 公 約 数 を 求 め る ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と は 次 の
よ う な も の で あ る.
ア ル ゴ リ ズ ム2.8:ユ 入 力:自
ー ク リ ッ ドの ア ル ゴ リ ズ ム
然 数 m,n
出 力:m,n
の 最 大 公 約 数 d と ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓
ス テ ッ プ: (1) r0←m
r1←n
(2) i←1 (3) ri≠0で
あ る 間,次
qi←ri-1÷riの
ri+1←ri-1÷riの
を行 う 商 余 り
{ri-1=qiri+ri+1で
あ る}
i←i+1 (4) ri=0の
とき
d←ri-1 〓←i-1
(5) d と〓 を 出 力
"性 質2.4"に は,m riがm
よ り,各i(i=1,2,…,〓)に
とn の 最 大 公 約 数 に 等 し い.し とn
の 最 大 公 約 数 で あ る.そ
qi←ri-1÷riの
ri+1←ri-1÷riの
商 余 り
つ い て,ri-1とriの た が っ て, ri-1がriで の と き のi に 対 して,ス
最大公 約数 割 り切 れ る と き, テ ッ プ(3)の
に よ り,ri+1=0と
な り,こ
の代 入 文 の直 後 に
i←i+1 を 実 行 す る の で,そ し て,そ
の あ と の ス テ ッ プ(4)で
の と き のi-1をlと
し て,ユ
は,ri-1が
最 大 公 約 数 に な る.そ
ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ と い
う こ と に し よ う.
例2.9
1024と40の
最 大 公 約 数 を こ の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る
と 次 の よ う な 手順 に な る. ●m=1024,n=40な
r0←1024
r1←40
の で,
●i←1 ●ri=r1=40≠0な
の で 次 を 行 う.
ri-1÷ri=r0÷r1=1024÷40=25余
qi=q1←25
ri+1=r2←24
り24な
の で,
i←i+1{=2} ●ri=r2=24≠0な
の で 次 を 行 う.
ri-1÷ri=r1÷r2=40÷24=1余
qi=q2←1
ri+1=r3←16
り16な
の で,
i←i+1{=3} ●ri=r3=16≠0な
の で 次 を行 う.
ri-1÷ri=r2÷r3=24÷16=1余
qi=q3←1
ri+1=r4←8
り 8 な の で,
i←i+1{=4} ●ri=r4=8≠0な
の で 次 を 行 う.
ri-1÷ri=r3÷r4=16÷8=2余
り 0 な の で,
qi=q4←2 ri+1=r5←0 i←i+1
{=5}
●ri=r5=0な
の で
d←ri-1=r4=8
l←i-1=4 ●d=8とl=4を
例 題2.2
出 力.
m=49とn=64の
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で
求 め よ. 解 答 ●m=49,n=64な
r0←49
r1←64
の で,
●i←1 ●ri=r1=64≠0な
の で 次 を 行 う.
ri-1÷ri=r0÷r1=49÷64=0余
qi=q1←0
ri+1=r2←49
り49な
の で,
り15な
の で,
i←i+1{=2} ●ri=r2=49≠0な
ri-1÷
の で 次 を 行 う.
ri=r1÷r2=64÷49=1余
qi=q2←1
ri+1=r3←15
i←i+1{=3} ●ri=r3=15≠0な
ri-1÷ri=r2÷r3=49÷15=3余 qi=q3←3
ri+1=r4←4
i←i+1{=4}
の で 次 を行 う. り 4 な の で,
●ri=r4=4≠0な
の で 次 を 行 う.
ri-1÷ri=r3÷r4=15÷4=3余
qi=q4←3
ri+1=r5←3
り 3 な の で,
i←i+1{=5} ●ri=r5=3≠0な
の で 次 を 行 う.
ri-1÷ri=r4÷r5=4÷3=1余
り 1 な の で,
qi=q5←1
ri+1=r6←1
i←i+1{=6} ●ri=r6=1≠0な
の で 次 を行 う .
ri-1÷ri=r6÷r7=3÷1=3余
qi=q6←3
ri+1=r7←0
り 0 な の で,
i←i+1{=7} ●ri=r7=0な
ので
d←ri-1=r6=1
l←i-1=6 ●d=1とl=6を
出 力.
{49と64の
最 大 公 約 数 は 1,す な わ ち,49と64は
互 い に 素}
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を 使 っ て 次 の こ と を 示 す こ と が で き る.
性 質2.5
自然 数 m
とn
の 最 大 公 約 数 が d の と き,
mx+ny=d と な る 整 数x
こ のx,y "性 質2.5"を
とy が 存 在 す る.
を ベ ズ ー(Bezout)係 示 す た め に,次
数 と い う こ と が あ る. の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を拡 張 し た も の
を 考 え よ う.
ア ル ゴ リ ズ ム2.9:拡 入 力:自
張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム
然 数 m,n
出 力:m,n
の 最 大 公 約 数 d,mx+ny=dと
な るx,y,お
よび ユ ー ク リ ッ
ドの ア ル ゴ リ ズ ム の 長 さl ス ア ツ フ: (1) r0←m r1←n
S0←1
t0←0
s1←0
t1←1
(2) i←1 (3) ri≠0で
あ る 間,次
qi←(ri-1÷riの
を 繰 り返 す. 商)
ri+1←(ri-1÷riの
余 り)
si+1←si-1-qisi
ti+1←ti-1-qiti
i←i-1+1 (4)
ri=0の
と き
l←i-1
d←ri-1{=re}
x←si-1{=se} (5)
y←ti-1{=te} d,x,y,lを
性 質2.5の し て,
出 力.
証 明 ア ル ゴ リ ズ ム2.9に
お い て,各i(i=1,2,…,l+1)に
対
が 成 り 立 つ こ と は,次 の と き,そ
sim+tin=ri
(2.7)
の よ う に 数 学 的 帰 納 法 を 用 い て 示 す こ と が で き る.i=0,1
れ ぞ れ,
s0m+t0n=1×r0+0×r1=r0
s1m+t1n=0×r0+1×r1=r1
が 成 り 立 つ.2〓i〓l+1の
と き,0〓j<iな
る j に 対 し て,sjm+tjn=rj
が 成 り 立 つ と 仮 定 す る と,
sim+tin-(si-2-qi-1si-1)m+(ti-2-qi-iti-1)n
=Si-2m+ti-2n-qi-1(Si-1m+ti-1n)
=ri-2-qi-1ri-1
=ri
と な り,式(2.7)を i=lの
得 る.
と き,rl=d,x=sl,y=tlだ
か ら,
xm+yn=slm+tln=rl=d で あ り,"性
例 題2.3
質2.5"が
証 明 さ れ た.
m=1260,n=299と
を 満 た すx,y
し て,m,n
□
の 最 大 公 約 数 と,xm+yn=d
を 拡 張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム を 使 っ て 求 め よ.
解 答 拡 張 さ れ た ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム は 次 の よ う に な る. 1) r0←1260
r1←299
s0←1
t0←0 s1←0
t1←1
2) i←1 3) ri=r1=299≠0な
qi=q1←4
ri+1=r2←64
si+1=s2←1
ti+1=t2←-4
i←i+1
の で,次 {r0÷r1=1260÷299の
余
{=si-1-qisi=s0-q1s1=1-4×0} {=ti-1-qiti=t0-q1t1=0-4×1} {=2}
qi=q2←4
ri+1=r3←43
の で,次
商}
{r1÷r2=299÷64の
余 り}
{=si-1-qisi=sl-q2sa=0-4×1}
ti+1=t3←17 i←i+1
を行 う
{r1÷r2=299÷64の
si+1=s3←-4
{=ti-1-qiti=t1-q2t2=1-4×(-4)} {=3}
5) ri=r3=43≠0な
の で,次
qi=q3←1
商}
{r0÷r1=1260÷299の
4) ri=r2=64≠0な
を行 う
を行 う
{r2÷r3=64÷43の
商}
ri+1=r4←21{r2÷r3=64÷43の si+1=s4←5
{=Si-1-qisi=s2-q3s3=1-1×(-4)}
ti+1=t4←-21 i←i+1
{=ti-1-qiti=t2-q3t3=-4-1×17)} {=4}
6) ri=r4=21≠0な qi=q4←2
の で,次
商}
{r3÷r4=43÷21の
Si+1=s5←-14
{=5} の で,次
を行 う
{r4÷r5=21÷1の
ri+1=r6←0
{r4÷r5=21÷
ti+1=t5←-1260
余 り}
{=ti-1-qiti=t3-q4t4=17-2×(-21))}
qi=q5←21
si+1=s6←299
,
{=si-1-qisi=s3-q4s4=-4-2×5}
ti+1=t5←59
7) ri=r5=1≠0な
を行 う
{r3÷r4=43÷21の
ri+1=r5←1
i←i+1
余 り}
商} 1 の 余 り}
{=si-1-qisi=s4-q5S5=5-21×(-14)} {=ti-1-qiti=t4-q5t5=-21-21×59)}
り}
i←i+1{=6} 8) ri=r6=0な l←5
の で,次
を行 う
{=i-1=6-1} d←1{=ri-1=r5}
x←-14
{=Si-1=s5}
y←59
{=ti-1=t5}
9) d,x,y
を 出力
した が っ て,1260と299の
最 大 公 約 数 は 1,す な わ ち,1260と299と
は互い
に 素 で あ り, (-14)×1260+59×299=1 とな る.
2.5.2
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム と フ イ ボ ナ ツ チ 数
フ イ ボ ナ ツ チ 数(Fibonachi
number)と
F0=0,F1=1
と し,2 以 上 の 自 然 数iに
は,
対 して,
Fi=Fi-1+Fi-2
に よ っ て 与 え ら れ る 数 の こ と で あ る.つ
ま り,F0=0,F1=1,F2=1,
F3=2,F4=3,F5=5,F6=8,F7=13,F8=21,F9=34,F10=55, …
であ る.
自 然 数 N〓2が
与 え られ た と き,N
以 下 の 2 つ の 異 な る 自 然 数 m,n
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き,ユ リ ズ ム の 長 さlが
一 番 大 き く な る の は,余
ー ク リ ッ ドの ア ル ゴ
りが 0 と な ら な い 割 り算 に お い て 商
が い つ も 1 と な る と き で あ ろ う と 考 え ら れ る.も の と き,99と98の
の最
ち ろ ん,た
と え ば,N=100
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き,
99=1×98+1
98=98×1
と な る の だ か ら,商
が 1 で あ れ ば い つ も ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓
が 大 き い と い う わ け で な い. N 以 下 の フ イ ボ ナ ツ チ 数 で 最 大 の も の をFkと 約 数 を 求 め る と き,ユ
す る とFkとFk-1の
最大公
ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 が 一 番 大 き く な る こ
と を 示 す こ と が で き る.FkとFk
-1の
最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ
ズ ム で 求 め る と 次 の よ う に な る.
i=1の
とき
Fk=1×Fk-1+Fk-2
i=2の
とき
Fk-1=1×Fk-2+Fk-3
i
=k-2の
と き
F3=1×F2+F1
i
=k-1の
と き
F2=2×F1
=1×2+1
=2×1
よ っ て,FkとFk-1の
性 質2.6
(2.8)
最 大 公 約 数 は 1で あ る.
2 以 上 の 自 然 数 N に 対 して,N
以 下 の 自 然 数 m,n(m>n)の
最
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る の に,ユ
ー ク リ ッ ドの ア ル ゴ
リズ ム の 長 さ は,N
す る と,FkとFk-1
以 下 の 最 大 の フ イ ボ ナ ツ チ 数 をFkと
の 最 大 公 約 数 を 求 め る と き の ユ ー ク リ ッ ド の ア ル ゴ リ ズ ム の 長 さk-1に
等
しい.
証 明 N 以 下 の フ イ ボ ナ ツ チ 数 で 最 大 の も の をFkと
す る.FkとFk-1の
最
大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リズ ム で 求 め る と き の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 は,上
の 式(2.8)で
示 した よ う にk-1で
あ る.m>nと
し,
m とn の 最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と き の ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さ〓 がk-1な
ら ば,m〓Fkで
あ る.実
の 最 大 公 約 数 を ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム で 求 め る と,m=r0,n=r1と して,
際,m
とn
i
=1の
と き
r0=q1r1+r2
i
=2の
と き
r1=q2r2+r3
i=k-2の
と き rk-3=qk−2rk-2+rk-1
i=k-1の
と き rk-2=qk-1rk-1
と な る が,式(2.8)と
最 後 の 式 か ら 比 べ て い っ て,
rk-1〓1=F1, qk-1〓2
だ か ら, rk-2=qk-1rk-1〓F2 ま たqk-2〓1で
あ る か ら,
rk-3〓qk-2rk-2+rk-1〓F2+F1=F3
同 じ よ う に して,い
つ もrk-j〓Fj(j=1,2,…,k)と
な る こ と が い え る.し
た が っ て,
m=r0〓Fk
で あ る. も し,N さ が,k
以 下 の 自 然 数 m,n(m>n)で
以 上 に な る も の が あ っ た ら,上
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 の こ と か ら,
Fk+1〓m〓N と な り,Fkが
N 以 下 の 最 大 の フ イ ボ ナ ツ チ 数 で あ る こ と に 反 す る . よ っ て,
ユ ー ク リ ッ ドの ア ル ゴ リ ズ ム の 長 さが k 以 上 に な る m は N 以 下 で は あ り え な い.
□
2.6.1
2.6
素 数
2以 上 の 自 然 数 が,1 数(prime
素 数 に つ い て の ア ル ゴ リズ ム
number)と
と 自 分 自 身 以 外 の 正 の 約 数 を も た な い と き,こ い う.素
れ を素
数 で な い 2 以 上 の 自 然 数 を 合 成 数(composite
number)と
い う.
2.6.2
エ ラ トス テ ネ ス の 飾(ふ
あ る 自 然 数N
る)い
が 与 え ら れ た と き,1 以 上 N 以 下 の 素 数 を す べ て 見 つ け る ア
ル ゴ リ ズ ム と し て エ ラ トス テ ネ ス の 節 い(sieve は,次
の よ う な 手 順 で,1
か ら N
ま で の 整 数i
of Eratosthenes)が
数 で な け れ ばPi=0を
対 応 さ せ る も の で あ る.
ア ル ゴ リ ズ ム2.10:エ
ラ トス テ ネ ス の 節 い
に,i が 素 数 な らPi=1,素
入 力 :3以 上 の 自 然 数 N 出 力:1
以 上 N 以 下 の 整 数i に,
Pi=
0
(iが 1また は合 成 数 の と き)
1
(iが 素 数 の と き)
と な るP1,…,PN ス テ ッ プ: (1) P1←0
{1 は 素 数 で は な い の でP1=0と
し て お く}
(2) i←2 (3) i〓Nの
間,次
を 繰 り返 す
Pi←1
i←i+1
{i〓2に
対 し てPiの
初 期 値 を す べ て 1 と し て お く}
(4) i←2 (5) i〓〓√N」
の 間,次
も しP2=1な
間,次 Pi*j←0 j←j+1
i←i+1
らば
j←2
i×j〓Nの
を 繰 り返 す
を 繰 り返 す
あ る.こ
れ
(6) P1,…PNを
例2.10
出力
N=20と
し て,上
の エ ラ トス テ ネ ス の 節 い の ア ル ゴ リ ズ ム を 実 行 し
て み よ う. ●P1=0と
す る.
●P2←1,…,P20←1 ●i←2 ●i=2の
と きP2=1だ
j=2か
ら10ま
か ら次 を行 う で 次 を行 う
Pi*j←0
i←i+1=3
こ れ に よ り,2 よ り大 き く20以 14,16,18,20に
P2は
1
●i=3の
ま り,4,6,8,10,12, なる
ま まで あ る と きP3=1だ
j=2か
下 の 2 の 倍 数,つ
対 し て,P4=0,P6=0,…,P20=0と
か ら次 を行 う
ら 6 まで 次 を行 う
Pi*j←0 i←i+1=4 こ れ に よ り,3 よ り大 き く20以
に 対 し て,P6=0,P9=0,…,P18=0と
P3は
下 の 3 の 倍 数,つ
ま り,6,9,12,15,18
なる
1の ま まで あ る
●i=4の
と きP4=0だ
か ら,何
も行 わ な い
●i=5の
と きi>〓√N」=〓√20」=4.47…
進 む ●P1,…,P20を こ れ に よ り,次
出力 の 表 を 得 る. 表2.4
20以 下 の 正 の 整 数 の 素
だ か ら,ス
テ ッ プ(6)へ
し た が っ て,20以
下 の 素 数 はPi=1と
な るi,す
なわ ち
2,3,5,7,11,13,17,19
と い う 結 果 を 得 る.
2.6.3
フ ェル マ ー の小 定 理
2 つ の 整 数a,b
が 整 数p
割 り切 れ る こ と で あ る.そ
を 法 と し て 合 同 で あ る と い う の は,a-bがp
で
の と き,
a≡b
mod
p
(2.9)
と 表 す.
例2.11p=3と
す る.5
と 2 は5-2=3で
あ り,こ
れ は 3 で 割 り切 れ る
か ら で あ る.1
5≡2 と-8は1-(-8)=9で
で あ る.3
あ り,こ 1≡-8
と 0 は3-0=3で
で あ る.1
mod3
と 2 は1-2=-1で
れ は 3 で 割 り切 れ る か ら
mod 3
あ り,こ
れ は 3 で 割 り切 れ る か ら
3≡0
mod
あ り,こ
1〓2
3
れ は 3 で 割 り切 れ な い か ら
mod 3
で あ る.
以 後,整
数 全 体 の 集 合 をZ,自
然 数 全 体 の 集 合 をNで
表 す こ と に す る.
次 の 性 質 は 定 義 か ら 自 然 に 導 く こ と が で き る.
性 質2.7 a,b,c∈Z,n∈N,n〓2と
す る と き,次
が 成 り立 つ.
1)a≡a
mod n
2)a≡b
mod
n
ならば
3)a≡b
mod
n
かつ
b≡a
mod
b≡c
n
mod n
4)a≡b
mod n
な ら ば a+c≡b+c
5)a≡b
mod n
な ら ば ac≡bc
な ら ば a≡
c
mod n
mod n mod n
次 の 定 理 は フ エ ル マ ー の 小 定 理 と よ ば れ て い る 有 名 な 定 理 で あ る.
定 理2.1
p∈Nを
素 数 と し,a∈Zと
す る と,
ap≡a
mod
が 成 り立 つ.さ
ら に,も
し,a
がpの
p
倍 数 で な い な ら ば,
ap−1≡1
mod
p
が 成 り立 つ.
証 明 は そ れ ほ ど難 し く な い が,こ n∈Nに
対 して,集
合{1,2,…,n-1}をXnで
nと互 い に 素 な も の の 集 合 をXxnで
ψ(6)=2,…
2.6.4
関 数 と い う.た
要 素 の 個 数 を 対 応 さ せ る 関 数 を ψ(n)で と え ば,ψ(2)=1,ψ(3)=2,ψ
で あ る.p∈Nが
F3
表 し,オ
イ ラー
(4)=2,ψ(5)=4,
素 数 な ら ψ(p)=p-1で
あ る.
フエルマー数 とカーマ イケル数 い う数 を フ ェ ル マ ー 数 と い い,こ
こで
表 す.F0=220+1=3,F1=221+1=5,F2=222+1=17,
=228+1=257,F4=224+1=65537で
で あ る.フ
要 素 の 中 で,
な わ ち,
は 互 い に 素}⊂Xn
0 以 上 の 整 数 n に 対 し て,22n+1と はFnで
表 し,Xnの
表 す こ と に す る.す
Xxn={a∈Xn|aとn
で あ る.n∈NにXxnの (Euler)の
こ で は 省 略 す る こ と に す る.
エ ル マ ー は,Fn=22n+1は
あ り,こ
れ らは ど れ も素 数
み な 素 数 だ ろ う と予 想 し た.し
か し,
F5
=225+1=4294967297=641×6700417で
あ り,こ
の 予 想 は 正 し くな
か っ た.
フ ェ ル マ ー の 小 定 理 は,p ap-1≡1
mod pで
て,an-1≡1 つ ま り,合
が 素 数 な ら ば,任
あ る と い っ て い る が,逆
mod nな
に,任
ら ば n は 素 数 だ ろ う か.実
成 数 n で 任 意 のa∈Xxnに
が 存 在 す る.こ
意 のa
∈Xxp 意 のa
は,こ
対 し て,an-1≡1
の よ う な 合 成 数 を カ ー マ イ ケ ル(Carmichel)数
に 対 し て, ∈ Xxpに
対 し
れ は 成 り立 た な い. mod nと
な る数
と い う. カ ー マ
イ ケ ル 数 は 次 の よ う に し て 特 徴 づ け ら れ る.
性 質2.8
正 の 整 数 n が カ ー マ イ ケ ル 数 で あ る た め の 必 要 十 分 条 件 は,n
意 の 素 因 数p (1)nはp2で
の任
に 対 し て, 割 り切 れ な い,
(2)n-1はp-1で
割 り切 れ る,
が 成 り立 つ こ と で あ る.
□
カ ー マ イ ケ ル 数 を小 さ い も の か ら い くつ か を あ げ る と, 561=3×11×17
1105=5×13×17
1729=7×13×19
2465=5×17×29
2821=7×13×31
6601=7×23×41
8911=7×19×67
で あ り,無
限 に 多 くの カ ー マ イ ケ ル 数 が 存 在 す る こ と も 最 近 証 明 さ れ て い る.
2.6.5
フ ェル マ ー の 素 数 判 定 テ ス ト
与 え られ た正 の整数
n が 素 数 で あ る か ど う か を 判 定 す る に は,n
2,3,4,…,[√n] で 割 っ て,ど
を順 に
れ か で 割 り切 れ る と き,n は 素 数 で は な く,そ
うで
ない とき素 数 で あ る,と す る素 朴 な方法 があ る.こ の 方 法で は,2,3,4,…,[√n] 司 の す べ て で 割 っ て み て は じめ て 素 数 か 素 数 で な い か が わ か る こ と もあ る の で, 最 悪 の 場 合,[√n] 回 の割 り算 を実 行 す る必 要 が あ る.こ こ で は,も
う少 し簡
単 に 素 数 で あ る か ど う か を 判 定 す る 方 法 を考 え る こ とに しよ う. 次 の ア ル ゴ リズ ム は フェ ル マ ー テ ス トと よば れ る素 数 判 定 の ア ル ゴ リ ズ ム で あ る.
ア ル ゴ リ ズ ム2.11:フェ 入 力:3
ルマー テス ト
以 上 の 整 数N
出 力:"合
成 数"ま
た は"素
数 か も し れ な い"
ス テ ッ プ: (1)a を{2,3,…,N-2}か (2)b←(aN-1をNで (3)も
ら全 くラ ン ダム に 選 ぶ 割 っ た 余 り)
しb≠1な
らば
"合 成 数"を
出力
そ うで な け れ ば "素 数 か も しれ な い"を
こ の ア ル ゴ リ ズ ム で,ま N
ず,N
と 互 い に 素 で な い の で,"合
aと N が 互 い に 素 と す る.も す る と,フェ
と 互 い に 素 で な いa が 選 ば れ た と き は, b も 成 数"を
し,こ
出 力 し,正
し い 答 を 得 る こ と が で き る.
の ア ル ゴ リ ズ ム が"合
ル マ ー の 小 定 理 に よ り,そ
マ イ ケ ル 数 の と き,こ が っ て,カ
出力
成 数"を
れ は 正 し い 答 で あ る.N
の ア ル ゴ リズ ム は,"素
数 か も し れ な い"を
出 力 した と
が 素 数 か カー 出 力 し,し
た
ー マ イ ケ ル 数 の と き は 正 しい 答 で な い こ と に な る.
次 の こ と が 証 明 で き る.
性 質2.9
フ ェ ル マ ー テ ス ト(ア ル ゴ リ ズ ム2.11)は,N
ル 数 の と き,"素
数 か も しれ な い"を
出 力 す る.フェ
が素 数か カーマ イケ ル マ ー テ ス ト(ア ル ゴ リ ズ
ム2.11)は,N
が カ ー マ イ ケ ル 数 で な い 合 成 数 の と き,少
で,"合
出 力 す る.
成 数"を
証 明 の概 略 前半 は上 で 説 明 した とお りで あ る.N
な く と も1/2の
確 率
が カ ーマ イケ ル数 で ない 合 成
数 とす る.a と N が 互 い に 素 で な け れ ばb と N も互 い に素 で な いの で,"合 成 数"を
出 力 す る,XxNの
数 は,{ψ(N)/2以
要 素 の 中 で,aN-1≡1
(mod N)と
下 で あ る こ と が 証 明 で き る.し
の 中 か ら,"合
成 数"を
返 す よ う なa
な る 要 素a の 個
た が っ て,a∈{2,…,N-2}
を 選 ぶ 確 率 が1/2以
上 で あ る こ とが 証 明
で き る.
□
実 は,次
の よ う に す る と,カ
ー マ イ ケ ル 数 の と き も,合
成 数 で あ る こ とが 判
定 で き る.
ア ル ゴ リ ズ ム2.12:フ 入 力:3
ェ ル マ ー テ ス トの 改 良 版
以上 の整数 N
出 力:"合
成 数",ま
た は"素
数 か も しれ な い",ま
たは N の約数
ス テ ッ プ: (1)a
を{2,3,…,N-2}か
ら全 く ラ ン ダ ム に 選 ぶ
(2)g←gcd(a,N) (3)も
しg>1な
gを
出力
(4)N-1=2km,
k,m∈N,
b0←(amを
(5)も
らば
しb0=1な
k〓1, mは
N で 割 っ た 余 り) らば
" 素 数 か も し れ な い"を
出力
(6)i←1 (7)i〓kの
間,次
bi←(b2i-1を
を行 う N で 割 った 余 り)
i←i+1 (8)も
しbk=1な
らば
奇 数,と
表 す と き,
j←min{i|0〓i<k,bi+1=1}
そ うで な け れ ば
"合 成 数"を
出力
(9)g←gcd(bj+1,N) (10)も
しg=1ま
た はg=Nな
らば
"素 数 か も し れ な い"を
出力
そ う で な け れ ば
g を出 力
こ の ア ル ゴ リ ズ ム に つ い て,次
性 質2.10
が 成 り立 つ.
ア ル ゴ リ ズ ム2.12は,N
力 す る.ア
ル ゴ リ ズ ム2.12は,N
な く と も1/2の
確 率 で,"合
カ ー マ イ ケ ル 数 の と き,少
が 素 数 の と き,"素
数 か も しれ な い"を
出
が カ ー マ イ ケ ル 数 で な い 合 成 数 の と き,少
成 数"を
出 力 す る.ア
な く と も1/2の
ル ゴ リ ズ ム2.12は,N
確 率 で,N
が
の 約 数 を 出 力 す る.
こ の ア ル ゴ リ ズ ム に つ い て は,参 考 文 献[1]な ど を参 照 され た い.
例2.12
N=561と
し て,ア
ル ゴ リ ズ ム2.12を
実 行 し て み よ う.561は
マ イ ケ ル 数 で あ り素 数 で は な い. ● ス テ ッ プ(1)で,a
と し て 7 が 選 ば れ た とす る.
● ス テ ッ プ(2)でgに
はgcd(7,561)=1が
● ス テ ッ プ(3)の
条 件 は 成 り立 た な い か ら,ス
●N-1=561-1=560=24×35だ b0←(735を561で ●b0≠1だ
か ら,ス
●i←1 ●ス テ ッ プ(7)で
b1←298
代 入 さ れ る. テ ッ プ(4)へ
か ら,k=4,m=35で
進む あ る,
割 っ た 余 り)=241 テ ッ プ(5)の
条 件 は 成 り立 た な い の で,次
へ 進 む
カー
b2←166
b3←67
b4←1
●ス テ ッ プ(8)でbk=1な
j←3
と して,次
へ 進む
● ス テ ッ プ(9)で
ので,
,
g←gcd(67+1,561)=17
とす る ●g=17≠1か
こ れ は,正
つg=17≠N=561な
の で ,g=17を
出力
し く 判 定 さ れ る 場 合 で あ る.
正 し く判 定 さ れ な い 場 合 も あ る. ● ス テ ッ プ(1)で,a
と し て103が
■ ス テ ッ プ(2)でgに ●ス テ ッ プ(3)の
はgcd(103
選 ば れ た とす る . ,561)=1が
●N-1=561-1=560=24×35だ b0←(10335を561で ●b0=1が 561に
対 し て,2〓a〓559な
テ ッ プ(4)へ
か ら ,k=4,m=35で
進 む あ る.
割 っ た 余 り)=1
成 り立 つ の で,"素
は,a=103,256,460,511の
代 入 され る.
条 件 は 成 り立 た な い か ら ,ス
数 か も しれ な い"を るa
で,"素
と き で あ る.
出力
数 か も しれ な い"を
出力 す る の
3 実 数 に つ い て
第 2章 で は,整 数 が コ ン ピ ュ ー タ で は どの よ う に表 され る か とい う こ と を説 明 した.実 数 も整 数 の と き と同 じ よ う に,2 進 数 で 表 され る の だ が,で
きる だ
け正 確 に表 す た め に,整 数 の場 合 と は異 な る表 現 を用 い る.こ の 章 で は,実 数 が どの よ う に表 さ れ,ど
の よ う な特 徴 が あ る の か,ま
た,コ
ン ピュ ー タ を用 い
て計 算 す る と き に どの よ う な こ とに 注 意 しな け れ ば な らな い の か を説 明 し よ う.
3.1
3.1.1
実 数 の 2進 表 現
実 数 の 2進 表 現
実 数 の 2 進 表 現 か ら 始 め よ う. た と え ば13.625と
数 は,
1×101+3×100+6×10-1+2×10-2+5×10-3
の こ と で あ る.同
い う10進
じ よ う に 考 え て,2
進 数(1101.101)2は
1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3
を 表 し て い る, 直 接 計 算 す れ ば,
1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3
=8+4+0+1+0.5+0+0.125
=13.625
で あ る か ら,(1101.101)2は10進
数 で は13.625で
あ る こ とが わ か る.
実 数 の 2進 表 現 の一 般 の 形 は
au×2u+au-1×2u-1+...+a1×21+a0×20
+b1×2-1+b22β-2+...+bl×2-l
で あ る.た
だ し,i=u,u-1,…,1,0,j=1,2,…l
ま た は 1 で,au≠0と
す る.こ
に 対 して,ai,bjは
の 表 現 で,絶
0
対 値 が 1 よ り小 さ い 2進 数 は,
±b1×2-1+b2×2-2+…+bl×2-l と表 さ れ る が,こ
の と き は,必
0.25=1/4=2-2=0.012で
ず し も,b1≠0と
と え ば,
あ る.
3.1.2
実 数 の 2進 表 現 へ の 変 換
ま ず,1
よ り小 さ い 正 の10進
小 さ い 正 の 数xの
な る 必 要 は な い.た
数 を 2 進 数 に 変 換 す る こ と を 考 え よ う.1
2進 表 現 が,(0.b1b2…bl)2
よ り
で あ る と す る と,
x=b1×2-1+b2×2-2+…+bl×2-l で あ る.こ
れ に 2 を 掛 け る と,
と な り,b1は
2x=b1+b2×2-1+…+bl×2-l+1 0 か 1 で,
b2×2-1+...+bl+1×2-l+1<1
だ か ら, 0 …2x<1 b1= 1
…2x>1
で あ る. 2x〓1の
と き は2x-1を
じ よ う に して,b2を
2倍 し,2x<1の
求 め る こ と が で き る.こ
と き は2xを
2 倍 す れ ば,同
の 操 作 を 繰 り返 し,2 倍 した 結 果
が ち ょ う ど 1 に な る ま で 繰 り返 せ ば,x た だ し,こ
の 2進 表 現 を 求 め る こ と が で き る.
の 操 作 が 必 ず 有 限 回 で 終 わ る と は 限 ら な い.そ
の と き は,そ
が 2進 数 と して 無 限 小 数 に な っ て い る こ と を 意 味 す る.
例3.1
た と え ば,10進
だ か ら,0.625に2を
表 現 で0.625の
2進 表 現 を 求 め て み よ う.0〓0.625<1
掛 け る こ と か ら始 め る.
0.625×2=1.25>1…b1=1
(1.25-1)×2=0.5<1…b2=0
0.5×2=1=1…b3=1
し た が っ て,
0.62510=0.1012
で あ る.
例 題3.1
10進
数0.09375の
2 進 表 現 を 求 め よ.
解 答 上 の 例 と 同 じ よ う に して,
0.09375×2=0.1875<1…b1=0
0.1875×2=0.375<1…b2=0
0.375×2=0.75<1…b3=0
0.75×2=1.5>1…b4=1
(1.5-1)×2=1=1…b5=1
と な る こ と か ら,
例 題3.2
0.0937510=0.00011
10進
数0.1の
2進 表 現 を 求 め よ,
解 答 上 と 同 じ よ う に し て,0.1の
2 進 表 現 を 求 め る と,
の数
0.1×2=0.2<1…b1=0 0.2×2=0.4<1…b2=0 0.4×2=0.8<1…b3=0 0.8×2=1.6>1…b4=1
(1.6-1)×2=1.2>1…b5=1
(1.2-1)×2=0.4<1…b6=0
と な り,こ
の 最 後 の 行 か ら は,0.2×2の
り返 す こ と に な る.し
行 か ら,(1.6-1)×2の
た が っ て,0.110の
0.0 0011
(b2の と こ ろ と 同 じ に な る) 行 まで を繰
0011
2進 表 現 は
0011
と い う 無 限 小 数 に な る.
1以 上 の 実 数 の 2 進 表 現 は,そ
の 数 の 整 数 部 分 と小 数 部 分 の 2進 表 現 を 別 々
に 求 め て,そ
れ ら を 足 せ ば よ い.
例3.2
数43.625は,整
10進
部 の0.625の
数 部 分 の43の
2 進 表 現 が0.101だ
2進 表 現 が101011で
あ り,仮
数
か ら,
43.62510=101011.1012
で あ る.
3.2.1
3.2
浮 動 小 数 点 数
浮 動小 数 点 数
計 算 機 で の 数 の 表 し 方 は,第 表 し 方 と,そ
れ と は 別 に,実
す る 浮 動 小 数 点 数(floating
1章 で 述 べ た 整 数 を 扱 う い わ ゆ る 整 数 型 と い う
数 型 と い う 表 し 方 が あ る.実 point
実 数 の β 進 表 現 の 一 般 の 形 は,
number)で
表 さ れ る.
数 型 は こ れ か ら説 明
±cu×
βu+cu-1×βu-1+...+c1×
+d1×
β1+c0×
β-1+d2×
β0
β-2+…+dl×
β-l
で あ る. β 進t 桁 の 浮 動 小 数 点 数 と は,
±(d1×
β-1+d2×β-2+…+dt-1×
=±(0
.d1d2…dt-ldt)β
下 の 整 数 で,p
ま た,あ
る 整 数L,U
囲 を 制 限 す る.± は 小 数 部 分,p
だ し,各i=1,…,t
以 上
は 整 数 で あ る. を 決 め て,L〓p〓Uと
を 符 号,0.dld2…dt-idtの
し てp
く の 場 合,2
の 取 り得 る 値 の 範
部 分 を 仮 数 部(mantissa)ま
た
い う.
進 浮 動 小 数 点 数 が 使 わ れ て い る.単
(single precision)と
よ ば れ る2 進 浮 動 小 数 点 数 は,1
と き,そ
の 最 初 の1
ビ ッ トを 符 号 を 表 す た め に,次
め に,残
りの23ビ
と,次
βp
に つ い て,diは0
を 指 数 ま た は 指 数 部(exponent)と
計 算 機 で は,多
β-t)×
× βp
と い う表 し方 の こ と で あ る.た β-1以
β-(t-1)+dt×
精度実数型
語 の 長 さ が32ビ
ッ トの
の8 ビ ッ ト を 指 数 を 表 す た
ッ ト を 仮 数 部 を 表 す た め に 使 う.ビ
ッ トパ タ ー ン を 図 示 す る
の よ う に な る.
浮 動 小 数 点 数 で は,整
数 と異 な り,符
号-絶 対 値 表 示 が 使 わ れ て い る.符
ビ ッ トパ タ ー ンの 符 号 に 格 納 さ れ て い る 数 が0 の と き+を,1 す.(-1)0=+1,(-1)-1=-1が
号 は
の と き-を
仮 数 部 に 掛 か る と考 え れ ば よ い.2
表
の補数
表 示 と は 異 な り,0 は2 つ の 表 現
00…00…0
10…00…0
を も つ.ビ 256個
ッ トパ タ ー ン の 指 数 部 は8 ビ ッ トで,0
の 数 を 表 現 す る こ とが で き る が,指
数 に127を
か ら28-1=255ま
での
加 え た も の を ビ ッ トパ タ ー
ン の 指 数 部 に 格 納 す る こ と で 負 の 指 数 も処 理 で き る よ う に し,
と な る.こ
L=-127,U=128 の よ う に指 数 部 に一 定 の 数 を加 え て 0以 上 の 整 数 で 表 現 す る こ と を
ゲ タ ば き 表 現 ま た は バ イ ア ス 表 現(biased 定 の 数 を バ イ ア ス(bias)と
い う.指
exponet)と
い う.指
数 部 に 加 え る一
数 と ビ ッ トパ タ ー ンの 指 数 部 に 格 納 さ れ る
数 の 対 応 は 次 の よ う に な る. 表3.1
指 数 と指 数 部 の 対 応
ビ ッ トパ タ ー ン の 仮 数 部 に は,dld2…d23が
格 納 さ れ る.
a. 正 規 化 仮 数 部 が 0で な い と き,最 ビ ッ トを 有 効 に 使 え て,精
上 位 ビ ッ トが 0 で な い ほ う が,仮 度 が 高 め ら れ る.た
と え ば,0.1は
限 小 数 に な り,そ
れ を 単 精 度 浮 動 小 数 点 数 と し て 書 く と,
+0.0
で あ る が,最
0011
上 位 ビ ッ ト,す
0011
0011
な わ ち,2-1の
0011
0011
数 部 の すべ て の 2進 表 現 で は 無
00×20
位 が 0 で な い よ う に 表 す と,
とな り,少 しで は あ るが,(*)の
部 分 だ け0.1に
よ り近 い値 とな る.
浮 動小 数 点 数 に対 して,指 数 部 を調 整 して,仮 数 部 の最 上 位 ビ ッ トが 0で な い よ う にす る こ と を正 規 化(normalization)す を正 規 表 現,正
る と い う.正 規 化 して 表 す こ と
規 化 され た 数 を正 規 化 数 とい う.
2進 浮 動 小 数 点 数 の場 合,最 上 位 ビ ッ トが 0で な い と う こ とは,1 に な る と い う こ とで あ る. 正 規 化 さ れ た 2進 浮 動 小 数 点 数 の 仮 数 部 をfと
す る と,
1/ 2〓f<1 で あ る. 正 規 化 さ れ な い で 表 さ れ て い る 数 を デ ノ ー マ ル(denormal)ま
たは非正規化
数 と い う.
b.
2進 浮 動 小 数 点 数 の 正 規 化
2 進 浮 動 小 数 点 数 を 正 規 化 す れ ば,そ
の 仮 数 部 をfと
す る とい つ も
0.1d2d3...dt
と い う よ う に 小 数 第 1位 は 1 に な る の だ か ら,仮
数 部 がt 桁 の と き,い
っその
こ と仮 数 部 は
1.d2d3…dtdt+1
と表 さ れ て い る と 考 え れ ば,も ば,0.7は
う 1桁 有 効 桁 数 を 増 や す こ と が で き る.た
2進 表 現 で は(0.1011001100110…)2と
とえ
い う 無 限 小 数 で あ り,単
精 度 浮 動 小 数 点 数 で は, で あ る が,こ
+0.10110011001100110011001×20 れ は,
+1.01100110011001100110011×2-1
と有 効 数 字 を 1桁 増 や し て 少 し だ け よ り真 の 値 に 近 く表 す こ と が で き る.0 正 規 化 さ れ て い な い 数 は 別 と し て,正
規 化 さ れ て い る 場 合 は,こ
や
の よ う に表
現 さ れ て い る と す る こ と を,け 1.d2d3…dt+1の
ち 表 現(economized
最 初 の 1 は,本
form)と
い う こ と が あ る.
来 の 仮 数 部 の ビ ッ トよ り さ ら に 最 上 位 に 見 え な
い ビ ッ トが も う 1 ビ ッ トあ る と考 え て い る わ け で,こ
れ を イ ン プ リ シ ッ トMSB
(implicit most significant digit)と
略 記 す る.こ
と 次 の よ う に な る.IMSBの
い い, IMSBと
れ を図 示 す る
1 ビ ッ トは 常 に 1で あ る.
以 後,2 進 浮 動 小 数 点 数 が 正 規 化 され て い る とい う と き は,IMSBを
含 めて上
の よ う に表 され て い る こ と とす る.
c. 指 数 部 に 関 す る注 意 2進 単 精 度 浮 動 小 数 点 数 が,IMSBも
考 え て,
と な っ て い る と き は, (-1)s×2e-127×1.f を 表 し て い る こ と に な り,指 ら255ま
で,2
進 表 現 で00000000か
実 際 に は,255(=111111112)の aNumber:非
数 部 に 格 納 さ れ て い る 数 e は,10進 ら11111111ま
ル を 表 す の に 用 い る. こ れ を 整 理 す る と 次 の よ う に な る. ●1〓e〓254の
と き,
(-1)s×2e-127×1.f
を 表 す. ●e=255か
つ,f=0の
で の 値 を と れ る わ け だ が,
と き は,Inf(Infinity:無
数)を 表 す の に 用 い,0(=000000002)の
と き,Infを
表 す.
表 現 で 0か
限 大)とNaN(Not と き は,0
とデ ノ ー マ
●e=255か
つ,f≠0の
●e=0か
つ,f≠0の
表す.
と き,
と き,NaNを
(-1)s×2-126×0.f を 表 す. ●e=0か
つ,f=〓0の
と き,0
を表 す 。
0 で の 割 り算 な ど を 行 っ た と き な ど に は,そ と な る の は,∞-∞
の 結 果 はInfと
表 示 さ れ る.NaN
や0/0と い う 計 算 を し た と き な ど で あ る .
d. オ ー バ ー フ ロ ー 正 規 化 さ れ て い る 2進 単 精 度 浮 動 小 数 点 数xで max normαl│x│と
と な る.〓
は お よ そ 等 し い と い う 意 味 で あ る.演
大 き く な る こ と を オ ー バー フ ロー(overflow)と と き,絶
絶対値 最大 の数の絶対値 を
表 す こ と に す る と,
算 の 結 果 ,絶 対 値 が こ れ よ り い う.ま
対 値 最 小 の 数 の 絶 対 値 をmin nortnal │x│で
た,正
規 化 され て い る
表 す と,
とな る. 正 規 化 しな け れ ば も っ と絶 対 値 の小 さ な数 を表 す こ とが で き る .
e. ア ン ダ ー フ ロ ー 演 算 の 結 果,絶
対 値 が 表 現 で き る 絶 対 値 最 小 の 数 よ り小 さ く な る こ と を ア ン
ダ ー フ ロ ー(underflow)と 値 最 小 の 数 と な る が,デ
い う.デ
ノ ー マ ル を 考 え な け れ ば,±2-126が
ノ ー マ ル を 考 え れ ば,絶
絶対
対 値 が もっ と小 さ い 数 を表 現
で き る. 2進 単 精 度 浮 動 小 数 点 数 をxと 対 値 をmin denormal│x│と
し,デ
ノ ー マ ル も含 め て絶 対 値 最 小 の 数 の 絶
す る と
と な る.
f. 倍 精 度 浮 動 小 数 点 数 単 精 度 よ り精 度 を高 め る ため に倍 精 度 浮 動 小 数 点 数 が あ る.倍 精 度 浮 動 小 数 点 数 は,1 語 の 長 さが32ビ を 表 す.IMSBを
と 表 さ れ る.IMSBは
の と き,1〓e〓2046の
ッ トの と き,2 語 を使 っ て,64ビ
含 め た表 現 で は,
常 に 1で あ る.単
精 度 と 同 じ よ う に,
整 数 で
(-1)s×2e-1023×1.f
ッ トで 1つ の実 数
と正 規 化 さ れ て い る と し,e=2047の と き 0 ま た は デ ノ ー マ ル,す
と き,Infま
た はNaNを
表 す.e=0の
な わ ち,
(-1)s×2-1022×0.f
を 表 し て い る こ と に す る.
例 題3.3
倍 精 度 浮 動 小 数 点 数xに
対 して,max
normal│x│,min
denormal│x│
を 求 め な さ い. 解 答 単 精 度 の と き と 全 く 同 じ よ う に 考 え て,
と な る.
3.2.2
丸
め
β 進t 桁 の 浮 動 小 数 点 数 は,t 桁 で 実 数 を 表 現 す る た め に,t+1桁 り捨 て た り,四
捨 五 入 を す る.こ
の よ う に す る こ と を,t+1桁
目 を,切 目 を丸 め る と
かt 桁 に 丸 め る と い う. 丸 め る 方 法 は,め
っ た に 使 わ な い 方 法 も含 め て 次 の よ う な も の が あ る.
●切 り 上 げ る
絶 対 値 の 大 き い 方 に 丸 め る.
10.2→11,10.7→11,-10.7→-11 ●切 り捨 て る
0 に 近 い 方 に 丸 め る. 10.2→10,10.7→10,-10.7→-10 ●大 き い 方 へ 丸 め る 。
10.2→11,-10.2→-10,-10.7→-10 ●小 さ い 方 へ 丸 め る.
10.2→10,-10.2→-11,-10.7→-11 ●ふ つ う の 四 捨 五 入
最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は 絶 対 値 の 大 き い 方 へ 丸 め る.
10.2→10,10.5→11,10.7→11,-11.5→-12 ●小 さ い 方 へ の 四 捨 五 入 最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は 絶 対 値 の 小 さ い 方 へ 丸 め る. 10.5→10,-11.5→-11 ●偶 数 へ の 四 捨 五 入
最 も 近 い 数 に 丸 め る.
最 も 近 い 数 が 2 つ あ る と き は,丸
め た あ と の,末
位 の 数 字 が 偶 数へ な る
め た あ と の,末
位 の 数 字 が 奇 数へ な る
よ う に 丸 め る.
10.5→10,11.5→12 ●奇 数 へ の 四 捨 五 入 最 も 近 い 数 に 丸 め る. 最 も 近 い 数 が 2 つ あ る と き は,丸 よ う に 丸 め る.
10.5→11,11.5→11
こ れ 以 外 に も あ る が,科
学 技 術 計 算 な ど で は,偶
数 へ の 四捨 五 入 が 標 準 的 で
あ る.
例3.3
2進 数 の 次 の よ う な 計 算 を 考 え よ う.た
だ し,2 進 表 現 で あ る こ と を 表
す 添 え 字 の 2 は 省 略 す る.
答 は1.0と
1.0+0.01-0.01+0.01-0.01 な る は ず で あ る.こ
れ を,左
か ら 順 に 足 し算 を し,そ
の 四 捨 五 入 を す る と,
(((1.0+0.01)-0.01)+0.01)-0.01
=((1.11-0.01)+0.01)-0.01 =((1.1-0.01)+0,01)-0.01
=(1.11+0.01)-0.01
=(1.1+0.01)-0.01
=10.0-0.01
=10-0.01
=10.0
=10
偶 数 へ の 四 捨 五 入 で 計 算 す る と,
(((1.0+0.01)-0.01)+0.01)-0.01
=((1.0-0.01)+0.01)-0.01
=((1.0-0.01)+0.01)-0.01
=(1.0+0.01)-0.01
=(1.0+0.01)-0.01 =1.0-0.01 =1.0-0.01
の つ どふ つ う
=〓
=1.0
とな る.
3.2.3
浮 動小数点 数の加減算
浮 動 小 数 点 数 の 加 減 算 が どの よ う に行 わ れ る か を 説 明 し よ う.簡 単 の た め, 丸 め は ふ つ う の 四 捨 五 入 で 行 う もの とす る.仮 数 部 がt 桁 の 浮 動 小 数 点 数 の 加 減 算 を行 う と き,2t桁
を使 っ て行 われ る とす る.2 つ の 正 規 化 され た β 進t 桁
の浮 動 小 数 点 数 を
a=(u1×
β-1+u2×
β-2+...+ut-1×
β-(t-1)+u×
β-t)×
β-1+v2×
β-2+...+vt-1×
β-(t-1)+v×
β-t)×βq
b=(v1×
とす る と き,±a±bは 下 で,復
次 の よ う に計 算 さ れ る.た
す る.以
号 は 同 順 で あ る.
1) 指 数 部 に つ い て,p-q>tの ±a±b=±
とき
α とす る
2) p−q〓tの
と き,次
を行 う
a) bを,指
b) 仮 数 部 の 加 減 算 を 実 行 す る
数 がpと
な る よ う に,仮
c) 仮 数 部 が1/β
d) 仮 数 部 が1 以 上 の と き は,仮 増 や し て,f)を
だ し,0〓b〓aと
βp
e) 仮 数 部 が1/β
数 部 を 右 へp-q桁
以 上1 未 満 の と き は,f)を
シ フ トす る
行 う
数 部 を 右 へ1 桁 シ フ ト し て,指
数 を1
行 う よ り小 さ い 場 合 は,仮
ま で 仮 数 部 を 左 ヘ シ フ ト し,シ
数 部 の 第1 桁 が0 で な く な る
フ トした 桁 数 分 だ け指 数 を減 ら し
,f)を 行 う
f) t+1桁 g)
目を 丸 め る
丸 め た こ と に よ り,仮
a) の よ う に,指
数 部 が1 以 上 に な る と き は,d)へ
戻 る
数 部 が 等 し く な る よ う に 桁 を ず ら す こ と を 桁 揃 え と い う.
例3.4
β=10,t=4,つ
た め に,ふ
ま り,10進
4桁 の 浮 動 小 数 点 数 で 考 え る.簡
つ う の 四 捨 五 入 で 丸 め る こ と に す る.
1)0.9876×102+0.1234×10-3は
次 の よ う に 計 算 さ れ る.
0.9876×102と0.1234×10-3の
0.9876×102+0.1234×10-3=0.9876×102と は,次
単の
の よ う にt+1桁
指 数 部 の 差 は2-(-3)>tだ
か ら
な る. な ぜ そ う な る か
目 を 丸 め る と き に0.1234×10-3は
す べ て切 り
捨 て ら れ る こ と に な る か ら で あ る.
2)0.9876×102+0.5432×10-2は
0.9876×102と0,5432×10-2の ら,桁
3)0.9876×102+0.1234×10-1は
指 数 部 の 差 は2-(-2)=4〓tだ
揃 え を し,0.00005432×102と
五 入 す る と い う 手 順 に な る.つ
次 の よ う に 計 算 さ れ る.
0.9876×102と0.1234×10-1の
し,足
し算 を 実 行 し,結
か 果 を四 捨
ま り,
次 の よ う に 計 算 さ れ る. 指 数 部 の 差 は2-(-1)=3〓tだ
か ら,0.1234×10-1を0.0001234×102と 結 果 を 四 捨 五 入 す る と い う 手 順 に な る.つ
桁 揃 え し,足 ま り,
し算 を 実 行 し,
4)0.9876×102+0.2345×101は
5)0.9753×10-1+0.2468×10-2は
6)0.1234×10-3-0.8642×10-4は
次 の よ う に 計 算 さ れ る.
次 の よ うに計 算 され る .
次 の よ う に 計 算 さ れ る.
3.2.4
い ろ い ろ な誤 差
た と え ば,10進
数0.1を
2 進 数 で 表 す と 無 限 小 数 に な り,計
桁 の 2進 数 に す る た め に あ る 桁 で 丸 め ら れ る た め,そ 0.110を
表 す こ と に は な ら な い.こ
き,e=x-xAをxAの る.ま
誤 差(error)と
た,eR=〓
をxAの
の丸 め られ た 数 は 正 確 に
の よ う な と き,0.110を
に 丸 め た 数 を そ の 真 数 の 近 似 値 と い う.真
数 をx,そ
真 数,そ
れ を有 限桁
の 近 似 値 をxAと
い う.xA-xを
相 対 誤 差(relative
算 機で は有 限
す る と
誤 差 とい う こ と もあ error)と
い う.相
対誤差 を
〓と す る こ と も あ る. │e│〓Eと ERを
な る と き,E
相 対 誤 差eRの
限界
を誤差
e の 限 界 と い い,│eR│〓ERと
あ る 桁 を 丸 め る こ と に よ り 生 じ る 誤 差 を 丸 め 誤 差(round 計 算 機 で 関 数f
のx
則 演 算 で 近 似 し て,そ
に お け る 値 を 計 算 す る と き は,そ の 近 似 式fAのxの
そ の 計 算 結 果fA(xA)が
な る と き,
と い う.
近 似 値xAに
丸 め ら れ(fA(xA))Aが
error)と
の 関 数 を有 限 回 の 四 お け る 値 が 計 算 さ れ,
得 ら れ る.こ
の と き,誤
f (x)-(fA(xA))A
=(f(x)-f(xA))+(f(xA)-fA(xA))+(fA(xA)-(fA(xA))A)
と 書 く こ と が で き る.こ ●f(x)-f(xA)を ●f(xA)-fA(xA)を ●fA(xA)-(fA(xA))Aを と い う.
の 式 の 右 辺 に つ い て,
代入 誤差 打 ち 切 り 誤 差,離
散 化 誤 差,公
生 成 誤 差 ま た は発 生 誤 差
い う.
式 誤差
差 は,
3.2.5
浮 動 小 数 点 数 と誤 差
一 般 に,t 桁 の β 進 浮 動 小 数 点 数 が 数 直 線 上 に ど の よ う に 分 布 し て い る か を 考 え よ う.計
算 機 で よ く使 わ れ る よ う に 1 語 の 長 さ を32ビ
雑 に な る の で,次
ッ ト と す る と,煩
の よ う な 簡 単 な 例 で 考 え て み よ う.
● 1語 は 6 ビ ッ ト ● 符 号 が 1 ビ ッ ト ●指 数 部 が 3 ビ ッ トで バ イ ア ス は310=112 ●仮 数 部 が 2 ビ ッ ト ●IMSBが
1ビ ッ ト
正 規 化 さ れ て い る と き は,
1.00×2p
で あ る.ビ て,次
(p=-2,-1,0,1,2,3)
ッ トパ タ ー ン を 表 に す る と 符 号 の 1 ビ ッ トをs=0ま
の よ う に な る.
表3.2
ビ ッ トパ ター ン
これ ら を数 直 線 上 に 表 す と次 の 図 の よ うに な る.
た は 1と し
こ の 図 か ら,一
様 に,つ
な い こ と が わ か る.指
ま り,い
た る と こ ろ 等 間 隔 に,分
数 部 をpと
す る と,間
布 して い る わ け で は
隔は
0.01×2p=2-2×2p
で あ る が,左
辺 の 最 初 の 項 の2-2の
数 が 3桁 で,そ
れ か ら1を
の で,も
数 部 がIMSBも
し,仮
指 数-2は,仮
引 い て,そ
れ に−(マ
含 め てt桁
数 部 のIMSBも
含 め た桁
イ ナ ス)を つ け た こ と に な る
な ら,間
隔 は
2-(t-1)×2p=21-t×2p
で あ る. した が っ て,ふ は,分
つ う の 四 捨 五 入 で は,1.f×2pに
布 し て い る 間 隔 の1/2で,こ
丸 め られ る数 の誤 差 の 限 界
の 例 で は,
2-3×2p
で あ り,仮
数 部 がIMSBも
含 め てt 桁 な ら
で あ る.相
2-t×2p
対 誤 差 が 最 大 に な る の は,1.00×2pへ
対 誤 差 の 限 界 は,こ
の 例 で は,
で あ り,仮 数 部 がIMSBも
で あ る.つ
ま り,相
含 め てt 桁 な ら
対 誤 差 の 限 界 は 指 数 部 に 関 係 な く,仮
の よ う な 丸 め 方 を す る か だ け に 依 存 す る.こ (machine
epsilon)と
丸 め ら れ る と き な の で,相
い う.
マ シ ン イ プ シ ロ ン に つ い て 次 が 成 り 立 つ.
数 部 の 桁 数t
と ど
の 誤 差 の限 界 をマ シ ンイ プ シ ロ ン
性 質3.1
ふ つ う の 四 捨 五 入 で 丸 め る と き,マ
め て(1+ε)Aと
す る と き,(1+ε)A>1を
シ ン イ プ シ ロ ン は,1+
ε を丸
満 た す 最 小 の 正 の 数 ε で あ る. □
こ の 例 の デ ノ ー マ ル の 場 合 を 考 え て お こ う.指
数 部 が000の
と き は,デ
ノー
マ ル で, ●0 000
0 00は+0を
●0 000
0 01は0.01×2-2を
表 す.
●0 000
0 10は0.10×2-2を
表 す.
●0 000
0 11は0.11×2-2を
表 す.
指 数 部 が111の
表 す.
と き は,Infま
た はNaNを
●0 111
00はInfを
●0 000
01はNaNを
表 す.
●0 000
10はNaNを
表す.
●0 000
11はNaNを
表 す.
3.2.6
表 す が,
表 す.
四則演算 の誤差限界
浮 動 小 数 点 数a,b
の 加 減 算a±bを
と 表 す と,│(a±b)-(a±b)A│の
計 算 し た と き に 得 ら れ る 値 を(a±b)A
限 界 は,ε
を マ シ ン イ プ シ ロ ン と す る と き,
次 で 与 え ら れ る.
│(a±b)-(a±b)A│〓max{│a│,│b│,│a±b│}×
ε
な ぜ な ら,t 桁 の 浮 動 小 数 点 数 と し てa, b が 表 さ れ て い る と す る と,も │a│>│b│ でa,b
の 指 数 の 差 がt よ り大 き け れ ば,指
加 減 算 の 手 順 か ら,a±bの あ り,し
た が っ て,そ
以 下 な ら ば,a±bを
数 の 小 さ い ほ う の 数 b は,
計 算 結 果 に 反 映 さ れ な い.こ
の と き の 誤 差 は,ε│a│以 計 算 し,こ
の と き,│b│<
下 で あ る.a,b
ε│a│で
の 指 数 の 差 がt
れ をt 桁 に 丸 め る と き に 誤 差 が 発 生 す る が,そ
れ は,ε│a±b│以
下 で あ る.
乗 除 算 で は,誤
差 は 結 果 を 丸 め る と き に 発 生 す る の で,誤
│(a×b)-(aA×bA)│〓│a×b│×
し,
ε
差 の限界 は
│(a÷b)-(aA÷bA)│〓│a÷b│×
ε
で 与 え ら れ る.
3.2.7
2次 方 程 式 の 解 の 公 式 と誤 差
2次 方 程 式
axe+bx+c=0
の 解 は,解
の 公 式 を 使 っ て,
で 求 め る こ と が で き る.実 て,た
数 が10進
7桁 の 浮 動 小 数 点 数 で 表 さ れ て い る と し
と え ば, 1.234567x2-876.5432x+0.3578642
と い う 2 次 方 程 式 の 2 つ の 解 を 解 の 公 式 で 求 め て み よ う.
b2-4ac=(-1×0.8765432×103)2
-(0.4000000×101)×(0.1234567×101)×(0.3578642×100)
=0.7683280×106-0.1767229×101
=0.7683280×106-0.000001767229×106
=0.7683262×106
だ か ら,
√ b2-4ac=√0.7683262×106
で あ り,
=0.8765422×103
=0
とな る.こ
.7100001×103
こ で,x2を
求 め る と き に,分 子 の 計 算
-b-√b2-4ac
で,0.0000010×103と
い う よ う に,有
の よ う に な る こ と を 桁 落 ち と い う.こ 対 で,絶
効 数 字 が2 桁 に 減 っ て し ま っ て い る.こ れ は,-bと-√b2-4acが,符
対 値 が ほ ぼ 等 し い こ と に よ っ て い る.こ
め に,x2を,解
と係 数 の 関 係 を 使 っ て,ま
の こ とが 起 こ る の を避 け る た
た は 解 の 公 式 で 分 子 を 有 理 化 し て,
と 変 形 す る と,
x2=
=(0.3578642×100)/(0.1234567×101)/(0.7100001×103)
=0.4082678×10-3
と な り,こ
れ は 真 の 解 に7 桁 と も 一 致 す る.
一 般 に,2
次方程式
ax2+bx+c=0
の 解 を コ ン ピ ュ ー タ な ど で 求 め る と き は,1
●b>0の
ときは
号が 反
つ の 解x1を
●b<0の
と して,も
と きは
う 1 つ の 解x2は,解
と係 数 の 関 係 を 使 っ て,
と す る.
3.2.8
累 和 を計 算 す る と きの 誤 差
0に0.01を10000回
加 え れ ば,100に
丸 め 誤 差 な ど が 累 積 し て,必 ロ グ ラ ム を 作 成 し,実 れ は,主
に,0.01が
な る は ず で あ る が,コ
ず し も そ う は な ら な い.次
の ア ル ゴ リズ ム3.1で
際 に 計 算 し て み る と ,結 果 は,100,0030な 2進 数 と し て は 無 限 小 数 で あ り,そ
き の 誤 差 が 積 も り積 も っ て,無
ン ピ ュー タで は プ
ど と な る.こ
れ を有 限 桁 に丸 め る と
視 で き な い 誤 差 と し て 現 れ る と考 え ら れ る.傍
証 と な る か ど う か わ か ら な い が,た
と え ば,0.01に
近 い2進
数 と して有 限小 数
の0.0117187510=0.000000112や0.00976562510=0.0000001012を10000 回 加 え れ ば,同
じ コ ン ピ ュ ー タ で,そ
れ ぞ れ,117.18750,97.656250と
な い 結 果 が 得 ら れ る.
ア ル ゴ リ ズ ム3.1:累
和 の 計 算(誤
入 力:x=0.01 出 力:xを10000個
足 した和
ス テ ッ プ: (1)i←1 (2)sum←0 (3)i〓1000の
間,次
sum←sum+0.01
i←i+1 (4)sumを
出力
を行 う
差 を 生 じ や す い)
誤差 の
4 方程式 の数値解法
方程式 f(x)=0 を解 く こ と を考 え る. た と え ば, ax2+bx+c=0 とい う 2次 の 代 数 方 程 式 が 与 え られ れ ば,解 の 公 式
で 解 くこ とが で き る.3 次 方 程 式,4 次 方程 式 も公 式 で解 くこ とが で きる が ,5 次 以 上 の代 数 方程 式 は,一 般 的 な公 式 は な い こ とは よ く知 ら れ て い る .こ の 章 で は,代 数 方 程 式 に限 らず,方 程 式 を コ ン ピュ ー タ を使 って 解 くア ル ゴ リズ ム で よ く知 られ て い る も の を説 明 す る.
4.1.1
4.1 解 析 学 の 初 歩 の 復 習
コー シ ー列 と完 備 な区 間
こ こで,こ
の 章 で 必 要 とな る 解 析 学 の 初 歩 的 な事 柄 を復 習 し よ う.
実 数 全 体 の 集合 をRで
表 す.
実 数 の 数 列{xj}が コー シ ー(Cauchy)列 で あ る と は,任 意 の ε>0に て,整 数n(ε)が 存 在 し,n,n'>n(ε)な らば, │xn−xn'│<
ε
対し
と な る こ と で あ る. R の 部 分 集 合Aが
完 備(complete)で
ま れ る 任 意 の コ ー シ ー 列 がAの
あ る と は,全
て の 要 素 がAに
要 素 に 収 束 す る こ と で あ る.区
含
間R=
(-∞,∞),(-∞,b]={x∈R│x