Excelの乱数関数と最大公約数関数で円周率πの近似値を求めよう

平面上の描いた真円の周の長さ/その円の直径の長さを円周率と言ってπで表し、
値は約3.141592654で、正確な値は整数比では表すことができないというのは有名です。
さらに、どんな有限次の代数方程式の解にもならないことも証明されています。
Excelでも

関数 説明
PI 関数 円周率πを返します。

という、近似値をを返す関数があります。
円周率πは、実は、整数の性質と確率で関係しているという以下の事実があります。

自然数から無作為に2つを取り出す時、その2つが互いに素である確率は{\frac{6}{\pi^2}}

「互いに素」とは、最大公約数が1であるということです。
ここでは、この事実を利用して、PI関数を使用せずにわざわざ、Excelの乱数関数と最大公約数関数でπの近似値を求める方法を紹介します。近似精度は悪いので、実用的には、まったく役に立ちません。
以下の関数を使用します。

関数 説明
RAND 関数 0 以上 1 未満の乱数を返します。
INT 関数 指定された数値を最も近い整数に切り捨てます。
GCD 関数 最大公約数を返します。
SQRT 関数 正の平方根を返します。
COUNTA 関数 引数リストの各項目に含まれるデータの個数を返します。
COUNTIF 関数 指定された範囲に含まれるセルのうち、検索条件に一致するセルの個数を返します。

セルA1とセルB1に

=INT(RAND()*1000000)

と入力
・・・0から1000000までの整数の乱数を2つ作成しています。

セルC1に

=GCD(A1,B1)

と入力
・・・2つの数の最大公約数を求めています。

セルD1に

=SQRT(6*COUNTA(C:C)/COUNTIF(C:C,1))

と入力
・・・C列の最大公約数のうち、1である割合を求めて、6を割って、その正の平方根を計算しています。この段階では、C列に値は1つだけなので、1でないと分母が0になってしまい0除算エラーが表示されます。

列 A:Cを

選択

Ctrl + D (Fill Down)を

実行(少し待ちます)
・・・A列からC列の数式を行最大値まで数式コピーしています。2つの乱数の最大公約数を求める操作を沢山行います。2組の乱数の最大公約数が1である割合の計算は沢山行うほど、精度が上がります。

D1に円周率πの近似値が出てくるはずです。
乱数を使用しているので、[F9](再計算)をすると値が変わります。それでも毎回、円周率に近い値となるはずです。
整数の性質が、確率を通して、円における円周と直径の長さの割合である円周率πと関係しているなんて、面白い!と思いませんか?