例 14.1
整数

の素数判定には自明な方法がある.
- 2, 3,
,
で割ってみる.
- 2, 3,
,
で割ってみる.
(
は
を越えない最大の整数.)
- 2 以外は奇数で割る.
いずれにせよ

に比例する回数の割算が必要である. たとえば

のとき,

. 現在の一般的な CPU の
クロックは 1GHz (

Hz) 程度, すなわち単位操作を一秒間に

回できる程度なので, 1クロックで1回割算ができても

秒

年程かかることになる.
素朴には, 計算量とは, ある大きさのデータに対して, 計算にどれだけ
時間 (ステップ数) あるいは領域 (メモリ量) がかかるかを示す量である.
ここでいくつか曖昧な点がある.
例 14.2
2 つの

桁の整数
を筆算の要領で計算することを考える.
を使って,

を計算してから

桁左にシフトしながら足して
行く. 一桁の数

に対し

を計算するアルゴリズムは次の通り.
for (
;
;
++ )
end for
この計算で, かけ算は

回, 10 による割算が

回必要である.
次に,
をシフトして足していく計算を考える.
これは, 繰り上がりを無視すれば
桁の数
,
の加算と考えてよいから次のアルゴリズムで計算できる.
for (
;
;
++ )
if
,
else
,
end for
(繰り上がりの処理)
これは, 本質的には加算が

回で計算できる.
以上の計算が

回必要になるから,

桁の数の積の計算には

に比例するステップ数が必要になることが分かる.