籌算
籌算(ちゅうさん、拡張新字体・筹算)とは、算木(筹、算、策)と呼ばれる一組の棒を用いる一種の器具代数術。布の盤(算盤)上に算木を並べて行ったことから布算ともいう。中国のほか朝鮮半島や日本をはじめとする漢字文化圏で広く利用された。
中国において籌算は戦国時代から行われていた。論証的な幾何学を重視する古代ギリシアの数学と比べて、官僚が広大な土地を統治するために必要な実用数学を重んじるのが中国数学の特徴であり、数値計算と代数の分野で特に発達していた。その基礎となったのが算木による計算術である。実際、中国文化圏における数学体系の基盤となった『九章算術』(紀元前1世紀ごろ)や類似の数学書は、具体的な問題と籌算による解法という形式で書かれていた。宋代から元代に至って、朱世傑の4元高次連立方程式に代表される高度な数学が発展したのも籌算の役割が大きかった。しかし13世紀ごろ、実用的な計算をより早く容易に実行できる算盤(そろばん)が普及したことで廃れた。
籌算は基本的に一組の算木と算盤(さんばん)を用いて行われる。『漢書』律暦志では算木を径3 mm、長さ16 cmほどの丸い竹棒だとしている。271本の算木を束にすると、ちょうど手の中に納まるサイズの六角形となるという。また算木は長さや重さの計量に転用されることもあった。『隋書』律暦志によれば長さ8 cm、幅6 mmの角棒である。また獣骨製もあり、裕福な商人は象牙と翡翠で作られたものを用いることもあった。算木を並べるための算盤は升目が区切られた布製のものが用いられた(後代は紙製)。
1971年、陝西省千陽県で発掘を行っていた中国人の考古学者が、保存状態の良い前漢代(紀元前206年 - 8年)の獣骨製算木が絹袋(籌嚢)に入っているのを発見した。1975年には竹製の算木が発掘された。前漢より古い時代の算木は発見されていないが、文献資料からは、今から2200年以上前の戦国時代にはすでに籌算法が開花していたことが明らかになっている。
籌算を行うには45項目からなる単純な10進乗算表、すなわち九九表(Chinese multiplication table)を覚えていなければならない。中国では春秋時代から九九表は知られており、児童、商人、官僚、数学者らは一様に九九を暗記してきた。
算木数字は単一の記号(棒)を配置することであらゆる十進数(分数・小数を含む)を表現する唯一の数字表記体系である。1の位に作られた算木数字は、1から5までは1本の縦棒がそれぞれ数1を表す。縦棒が2本なら数2を表し、3本以降も同様である。6から9までの数を表すには二五進法が用いられ、縦棒の上に置かれた横棒が数5を意味する。下の表に1から9までの数を表す。下段は横棒を基本とした別の表記法である。この表記法は数書『孫子算経』(3 - 5世紀)に解説されていたものである。
9より大きい数は十進法によって表される。1の位の左隣に作られた算木数字は、それに10をかけた数を表す。さらに左隣の升は100の位を表し、そこに作られた算木数字は100をかけた数を表す。これ以降も同様である。数231を表すには、右図の上段に示すように、1の位に縦棒を1本置いて1とし、10の位に縦棒を3本置いて30とし、100の位に縦棒を2本置いて200とし、合計して231とする。
籌算は升目のない盤上で行われることが多い。このため、右図の中段のように縦式の算木数字2、3、1を続けて置くと、数231ではなく53や24と間違えられる可能性がある。このような混乱を避けるため、算木数字をいくつか続けて置くときには、右図の最下段に示すように、縦式と横式の表示法を交互に用いる。ただし1の位は必ず縦式とする。clear
算盤上ではアラビア数字のようなゼロ記号は用いられず、升目を空白にすることで数0および位取りのための0を表した。右図に表された算木数字「873190783」では、1000の位が空白となっている。記号「〇」をゼロの意味で用いる習慣は宋・元のころに始まった。南宋時代に書かれた『数書九章』が記号「〇」を用いた最古の文献記録である。
世界で初めて負数が導入されたのは中国数学であった。前漢代の数学者は算木の種類によって正負の数を表していた。赤い算木を正、黒い算木を負とする方法や、断面が三角の算木を正、正方形のものを負とする方法がある。そのほか、劉徽による『九章算術』の注釈には、右の図のように、最小位に斜めに算木を置くことで負の数を表す方法が記されている。宋代になると、印刷された数書や筆算で負数を表す場合に赤字や斜線が用いられた。clear
『孫子算経』には小数を用いた計量法が記載されている。基本の長さ単位は尺であり、それより小さい単位が以下のように続く。
「1尺2寸3分4厘5毛6糸7忽」の長さを算盤上に表すと以下のようになる。
ここでは  の位が単位長さである尺を表している。
南宋期の数学者秦九韶は長さの計量以外にも小数を適用した。秦の著書『数書九章』では、「1.1446154日」が
と表されている。単位の位は下に「日」の字をつけることで示される。
籌算は加法原理と親和性が高い。アラビア数字と異なり、算木数字の各桁を表している棒は加法性を持っている。加算を行うには棒を機械的に動かすだけでよく、1桁の数の加法を暗記する必要はない。これがアラビア数字体系との最大の差異である。たとえば、アラビア数字「1」および「2」を機械的な操作によって「3」へと変換することはできない。
籌算による 3748 + 289 = 4037 の計算手順を以下に示す。
この過程により、被加数の棒の配置は適切に変更され、加数からは棒が消えてしまう。
繰り下げの必要がない場合、減数(下段)の各桁の棒と同じ数だけ、被減数(上段)の各桁から棒を差し引くだけでいい。上段に残った数が求める差である。下図は減算 54 − 23  31 の計算ステップを示している。
4231 − 789 = 3442 のように繰り下がりがある場合、より複雑な手順が必要となる。この減算の計算ステップを下に示す。
『孫子算経』には籌算による乗算の方法が詳述されている。下図に 38 × 76  2888 の計算ステップを示す。
『孫子算経』の方法で除算  309  441 を行う手順を下図に示す。計算は三段に分けて行い、上段から順に「商」、「実(被除数)」、「法(除数)」の名がつけられる。
『孫子算経』の除算アルゴリズムはインドを経由して、825年にアル=フワーリズミーの手によりそのままの形でイスラム国家に伝えられた。13世紀にはアル=フワーリズミーの著書がラテン語に翻訳され、孫子の除算法はヨーロッパに広まりガレー算へと発展した。925年にアル=ウクリーディスィーが書いた Kitab al-Fusul fi al-Hisab al-Hindi や、11世紀にKushyar ibn Labbanが書いた Principles of Hindu Reckoning にみられる除算法は孫子のアルゴリズムと同じものである。
籌算による除算で、各桁の数を除したときに剰余が出たならば、剰余と除数は上下に並べて置いておかなければならない。劉徽による『九章算術』の注釈では、上の数は「实(実)」、下の数は「法」と呼ばれていた。『孫子算経』では上の数は「子」または「分子」、下の数は「母」または「分母」とされており、現代中国語・日本語の分数用語と同じである。右図の例では、1が分子(剰余)、7が分母(除数)であり、それら2つを合わせて分数 1 となる。前節の除算 309 の商は 441 と読むこともできる。劉徽は『海島算経』において分数を含む計算を多数行った。
このように分子を上に、分母を下に置いて間に水平線を書かない分数の表し方は、除算法と同時にアラビア国家に伝えられた。その使用例は10世紀のアル=ウクリーディスィーや、15世紀にアル=カーシーが書いた『算術の鍵』にみられる。
『九章算術』にいう合分術により、分数の加算 1 + 2  11  を行う手順を以下に示す。
『九章算術』にいう減分術により、分数の減算 8 − 1  31 を行う手順を以下に示す。
『九章算術』にいう大広田術により、帯分数の乗算 31 × 52  18 を行う手順を以下に示す。
『九章算術』では約分術という名で分母と分子の最大公約数を求めて約分を行うアルゴリズムが記載されている。分母と分子のうち大きい方から小さい方を引き、それを繰り返していって分母と分子が等しくなるとそれが最大公約数である。この方法はユークリッドの互除法と同一のものである。600 の最大公約数75を求める手順を以下に示す。
分母分子をそれぞれ最大公約数75で割れば、約分された 8 が得られる。
暦学者で数学者の何承天は、分数による一種の内挿法である「調日法」を考案した。まず未知の実数をそれより大きい分数(強率)と小さい分数(弱率)で挟む。強率および弱率の分母どうし・分子どうしをそれぞれ足して新しい分数を作り、強率もしくは弱率と置き換える。この計算を繰り返すことで、未知数の近似値を求める方法である。祖沖之が得た名高い近似値 pi  355 は調日法で求めることができる。clear
『九章算術』巻第八「方程」にはガウスの消去法に似た連立一次方程式の解法が述べられている。以下を例題とする。
(訳)上等の稲が3束、中等の稲が2束、下等の稲が1束あり、これらの実を合わせると39斗になる。それぞれ2束、3束、1束であれば34斗となり、1束、2束、3束であれば26斗となる。それぞれの稲1束当たりの実は何斗か?
代数的にはこの問題は三元連立方程式で表される。
\begin{align}
3x+2y+z &= 39 \\
2x+3y+z &= 34 \\
x+2y+3z &= 26 \\
\end{align}
『九章算術』では、算盤上に4×3行列のような形式で並べた棒を数えることでこの問題を解いている。
アルゴリズムは以下の通りである。
右列の一番上の値を中列にかける。
中列の一番上の値が0になるまで、中列から右列を繰り返し引く。
同様の手順により、右列を用いて左列を縮約する。
縮約された中列を用いて、左列をさらに縮約する。その結果三角行列のような配置が得られる。
左列に作られた数から、下等の稲1束当たりの実は 99  23 斗と求められる。
この結果を用いれば、上等および中等の稲についてそれぞれ  91 斗、 41 斗の値を得るのは容易である。
籌算による開平計算のアルゴリズムは開方術として『九章算術』に記載されており、いくらか用語は異なるが『孫子算経』にも記述がある。
『孫子算経』中巻第19問に平方根の近似値\sqrt{234567}\approx484\tfrac{311}{968} を求める問題がある。
この計算アルゴリズムを以下に示す。
最後に残った商の484、実の311、方法の968は、求める平方根\sqrt{234567}\approx484\tfrac{311}{968}を表している。
北宋の数学者賈憲は、開平計算の途中で「方法」を2倍する代わりに、効果は変わらないが「商」の1桁を「方法」に加えるアルゴリズムを発展させた。
『九章算術』巻第四「少広」には立方根を求める方法(開立方術)が記載されている。
(訳)問19:体積が1860867立方尺の立方体がある。1辺の長さはいくらか? 解:123尺。
現代の表記法では、この問題は以下のように書かれる。
\sqrt[3]{1860867}=123
賈憲はホーナー法を単純化した開立法を発明した。右のアニメーションは賈憲のアルゴリズムで上の問題を解く手順を示したものである。
賈憲は以下の形式を持つ単純な4次方程式をホーナー法によって解く方法を考案した。
x^4=a
南宋の数学者秦九韶は賈憲のホーナー法を発展させ、10次までの代数方程式を解いた。秦の著書『数書九章』第六巻問二で提示された方程式
-x^4 +15245x^2-6262506.25=0
x=20\frac{1298025}{2362256}
を求めるアルゴリズムを右のアニメーションに示す。この方程式は、算盤上に以下の表のように置かれた算木の配置から構成したものである。
高次方程式の解法である天元術は12世紀ごろに生まれたと考えられている。このころ未知数の記号は用いられていなかったため、次数の順に並べた各項の係数を算木数字の列とすることで方程式を表現していた。元代の数学者李冶は天元術の表記を洗練させた。
李冶の『測円海鏡(zh)』第二巻、第十四問で提示されている一元方程式
-x^2-680x+96000=0
は天元術では以下のように表される。それぞれの段の数字が未知数各次の係数を表す。1次の段には「元」の字を記す。
元の数学者朱世傑は天元術をさらに発展させ、二元から四元までの代数方程式を扱う方法を考案した。朱が著した『四元玉鑑』では四元はそれぞれ天、地、人、物と呼ばれていた。四元を未知数 x 、y 、z 、u で表し、いくつかの数式を例として算木式で表記する。
例 (1):x - 2y +3z -4w +4
例 (2):x^2 + 4y^2 + 9z^2 - 16w^2 -4xy + 6xz + 16yw -24 zw - 2yz