数式の無限性が素数の無限を作る
このワークシートはMath by Codeの一部です。
数ではなくて、数式から素数分布をさぐる。
それが、オイラー流です。
無限がテーマだったら、
無限の数式を作ってしまおうというわけです。
1.オイラーは母関数が好き
<級数になれよう>
オイラーは級数の積をあやつる天才です。
たとえば、
有限等比級数の和がS=1+x+x^2+x^3としたとき、
Sx-S=x^4-1=S(x-1)となることから、S=(x^4-1)/(x-1)となることを一般化できたね。
Sn=Σx^n=(x^(n+1)-1)/(x-1)=(1-x^(n+1))/(1-x)
ここで、無限等比級数の和を確認しよう。
xが1より小さいと、n→∞のとき、xのべき→0だから、S∞=1/(1-x)だったね。
これは高校数学の復習というレベルでした。
さて、オイラーさんなら、
たとえば、324=4×81=2^2*3^4の約数を調べるときに面白い式を作るでしょう。
ふつうなら、(1+2+4)(1+3+9+27+81)を展開した項が818の約数です。終わり。
となるところを、素数のべきの逆数和の積を展開するのです。
べきの和の等比xは素数の逆数だから、(1-x^(n+1))/(1-x)でも計算できますね。
ただの等比数列の和とちがい、項数を無限にすると1/(1-x)に収束するというおまけがつきます。
(1+1/2+1/4)(1+1/3+1/9+1/27+1/81)=
1+1/2+1/3+1/4+1/6+1/9+1/12+1/18+1/27+1/36+1/54+1/81+1/108+1/126+1/324
「5の和分解」の問題を解くのに、
5=5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1 と相互の脈絡なく、数の大小関係だけで7通りを求めるでしょう。
オイラーさんなら、
1の倍数、2の倍数、3の倍数、4の倍数、5の倍数の指数の母関数を作り、
その積を求めるでしょう。
{1+x^1+x^(1+1)+x^(1+1+1)+x^(1+1+1+1)+x^(1+1+1+1+1)+...}×
{1+x^2+x^(2+2)+...}×
{1+x^3+x^(3+3)+...}×
{1+x^4+....}×
{1+x^5+...}×......
=1+ax^1+bx^2+cx^3+dx^4+ex^5+.......
ここで、xの絶対値が1より小さいと仮定して、eが7になればよいですよね。
x進法だと思って係数を6桁分かける。
1の位はすべて1になるように反転してかけます。
111111×010101×001001×010001×100001×1.....=...753211だから、
1の位から順に1,a,b,c,d,e=1,1,2,3,5,7となる。
だから、e=7となるね。
2.オイラーの素数の無限性の証明
<オイラー積>
1/素数を公比とする、無限級数の和の式を順次作りましょう。
S2=(1+1/2+1/2^2+...+1/2^n+.......)=1/(1-1/2)=2/1
S3=(1+1/3+1/3^2+...+1/3^n+.......)=1/(1-1/3)=3/2
S5=(1+1/5+1/5^2+...+1/5^n+.......)=1/(1-1/5)=5/4
S7=(1+1/7+1/7^2+...+1/7^n+.......)=1/(1-1/7)=7/6
...
Sk=(1+1/k+1/k^2+...+1/k^n+.......)=1/(1-1/p)=p/(p-1)
.....
これをすべてかけ算します。
無限積です。これをオイラー積といいましょう。
すると、818の約数展開のときに、展開式の分母に818の約数がすべて出てきました。
上のSkはすべての素数をさしてますから、展開式の分母にどんな数の約数でも出てくるはずです。
言い換えると、展開式の分母にはすべての数が登場するはずです。
どんな数でも、素数は素数のままにすることを含めて素因数分解が可能だからです。
つまり、
S2・S3・S5・S7・…・Sk・…=1+1/2+1/3+1/4+1/5+.......+n+...........
左辺はすべての素数のべきの逆数の無限和の積、
右辺はすべての整数の逆数の無限和です。
無限の整数が存在することと、Skも無限個あることと同じです。kは素数を渡るので、
素数は無限個です。
オイラーが1737年の「無限級数に関する様々な観察」で発表。
スマートに記号化してかくと、
Πp∞Σn=0∞(1/p)n=Σn=1∞1/n
ということですね。
この右辺、自然数の逆数和を調和級数といいます。
課題:調和級数の変化を感じるために、少し計算してみよう。
調和級数の和が自然対数で近似できることも確認できる。
[IN]Python
#Harmonic
import numpy as np
def Harmonic_f(N):
H = sum(1/x for x in range(1,N+1))
return H
def H_report(N):
Hn = Harmonic_f(N)
Ln = np.log(N)
diff = Hn - Ln
print("-" * 5,end="")
print(f"【N = {N}】",end="")
print("-" * 20)
print(f" Harmonic(N) = {Hn:.4f})")
print(f" ln(N) = {Ln:.4f}")
print(f" difference = {diff:.4f}")
H_report(10)
H_report(1000)
H_report(100000)
H_report(10000000)
H_report(100000000)
[OUT]
-----【N = 10】--------------------
Harmonic(N) = 2.9290)
ln(N) = 2.3026
difference = 0.6264
-----【N = 1000】--------------------
Harmonic(N) = 7.4855)
ln(N) = 6.9078
difference = 0.5777
-----【N = 100000】--------------------
Harmonic(N) = 12.0901)
ln(N) = 11.5129
difference = 0.5772
-----【N = 10000000】--------------------
Harmonic(N) = 16.6953)
ln(N) = 16.1181
difference = 0.5772
-----【N = 100000000】--------------------
Harmonic(N) = 18.9979)
ln(N) = 18.4207
difference = 0.5772
オイラーは母関数を見通す力もすごいが、無限の挙動から基本関数を見抜く力もすごい。
0.5772...という隙間(オイラー定数 γ(ガンマ))の発見も追体験できるね。
素数の無限性というテーマからスタートしたのですが、オイラーのあまりに神がかりな
無限級数の近似能力はどこから来ているのでしょうか。
PCやプログラミングもできません。
そこを探ってみよう。<オイラー定数γ>
オイラーの生きた時代は、
現代のような集合論的な公理主義の数学のみを数学とするというような時代ではありません。
証明の厳密性は今よりもゆるかったのです。
それにオイラーには、自由自在に無限の数式と戯れる力があったのです。
自然対数のeを作ったり、自分で欲しい道具を自分で作る発想と十分な知識です。
また、数学の標準関数を無限級数の和に展開するテーラー展開を自分でも考えたり、利用したりすることができました。
オイラーはニュートンの一般二項定理を使って
a^x=1+kx+k^2/2!+k^3/3!+....を導き出し、
x=k=1として、e=a=1+1+1/2!+1/3!+....=2.71828....を求めたり
ln(1+x)=x-1/2 *x^2+1/3*x^3-1/4*x^4+....を導き出し、
xに-xを代入して、ln(1-x)=-x-1/2 *x^2-1/3*x^3-1/4*x^4-....を出すことで、
ln(1+x)/(1-x)=2(x+x^3/3+x^5/5+....]を求めるなどしていたようだ。
調和級数Harmonicの発散については、ln(1-x)=-x-1/2 *x^2-1/3*x^3-1/4*x^4-...のx=1とおくことで、
ln0=-(1+1/2+1/3+1/4+.....)。
これから、Harmonic=-ln0=ln(0^(-1))=ln(1/0)=ln∞=∞を出すという
直観的だが乱暴なことをやっていたようだ。
面白いのはln(1+x)=x-1/2 *x^2+1/3*x^3-1/4*x^4+...のxに1/nを代入して
ln(1+1/n)=1/n-1/2n^2+1/3n^3-1/4n^4+.....から1/nで解き、
1/n=ln[(n+1)/n]+1/2n^2-1/3n^3+1/4n^4-......
このnに自然数を代入して、
1 =ln2/1+1/2-1/3+1/4-.....,
1/2=ln3/2+1/8-1/24+1/64-....
1/3=ln4/4+1/18-1/81+1/324-....
........
1/n=ln[(n+1)/n]+1/2n^2-1/3n^3+1/4n^4-......
これを辺々たして、左辺は調和級数の和で、
右辺は[ln2/1+ln3/2+ln4/3+....]
+1/2[1+1/4+1/9+....+1/n^2]-1/3[1+1/8+1/27+....+1/n^3]+1/4[1+1/16+...+1/n^4]-....
=ln(n+1)+γとする。
オイラーγは手計算と暗算で0.577218...と求めた。
これはnによらない近似値だ。
代入につぐ代入を繰り返し、変数を無限大にして式を変化させるなど、独自の技を駆使した結果だ。
オイラーはこれで満足したようだ。つまり、γ=Σk=1n1/k-ln(n+1)
その後もγは数学者の間で、様々な議論がおきているようだね。
γは無理数のようだが、証明はまだできていない。
課題:オイラーの方法γ=Σk=1n1/k-ln(n+1)でオイラー定数を計算してみよう。
[IN]Python
#Euler_gamma γ
import numpy as np
def euler_gamma(N):
# 調和級数の和
harmonic_sum = sum(1/k for k in range(1, N+1))
ln_np1 = np.log(N + 1)
gamma_approx = harmonic_sum - ln_np1
return gamma_approx
print(f"{'項数 (N)':<10} | {'オイラー式による γ の近似値':<25}")
print("-" * 40)
for n in [10, 100, 1000, 10000, 100000]:
val = euler_gamma_reproduction(n)
print(f"{n:<10} | {val:.10f}")
[OUT]
項数 (N) | オイラー式による γ の近似値
----------------------------------------
10 | 0.5310729812
100 | 0.5722570008
1000 | 0.5767160812
10000 | 0.5771656691
100000 | 0.5772106649
3.バーゼル問題
<バーゼル問題>
オイラーの指導者の兄である、ヤコブ・ベルヌーイは
無限級数の和の計算に燃えていて、ついに
Σ1/k^pというp級数を研究していた。
p=1のときは調和級数で発散する。
p=2のときはどうなるか?
ヤコブは結果を出せず、1689年にかいた「無限級数の扱い」の中で、
「誰か解を見つけてくれ」とSOSを出したのです。
かいた場所がバーゼルだったので、バーゼル問題と呼ばれるようになったそうです。
オイラーは1731年に解決の見通しが立ったらしい。
その着想というのは、I=∫01/2-ln(1-t)/t dt を2通りの方法で出すというものだった。
1つめのlnをtの級数に直して積分して、
I=(1/2+1/2^2/4+1/2^3/9+1/2^4/16+.....)
2つめはz=1-tと置換してから、zの級数にして和を求め、部分積分をしてすることで、
I=-[ln2]^2-(1/2+1/2^2/4+1/2^3/9+1/2^4/16+....)+Σ1/k^2
2式を比べることで、
Σ1/k^2=2(1/2+1/2^2/4+1/2^3/9+1/2^4/16+.....)+[ln2]^2
=Σ1/(k^2*2^(k-1))+[ln2]^2
14項まで計算しただけで、1.644934....となる。
3.14159265359**2/6=1.6449340668484431
つまり、Σ1/k^2=π^2/6に到達してしまった!
頭の中で、円周率の値など瞬時に2乗して、6で割ることなど朝飯前だったのだろう。
そうでなければ、1.644934....からπ^2/6が出てくるはずはないでしょう。
オイラーは1735年に解決した。「逆数の級数の和について」で。
こちらが有名な解法だね。
これは次の2つを前提にするだけなので、とても単純でわかりやすい。
・P(0)=1でn個のak(kは1からn)についてP(ak)=0となるn次方程式はP(x)=Π(1-x/ak)と因数分解できる。
・sinx=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!+.....
まずは、P(x)=sinx/x=1-x^2/3!+x^4/5!-x^6/7!+x^8/9!+.....とおくと、p(0)=1となるね。
sinx/xに着目すれば、sinx=0となるのはx=±kπという解があるから、次のように因数分解できる。
P(x)=(1-x/π)(1-x/-π)(1-x/2π)(1-x/-2π)(1-x/3π)(1-x/-3π).....
=(1-(x/π)^2)(1-(x/2π)^2)(1-(x/3π)^2)..............
これを展開して、同類項で整理しよう。
P(x)=1-(1/π^2+1/4π^2+1/9π^2+....)x^2+......
P(x)の表示が2つできたね。
2式を比べると、x^2の係数がともに負数だから、
1/3!=(1/π^2+1/4π^2+1/9π^2+....)=1/π^2*(1/1+1/4+1/9+....)=1/π^2 Σ1/k^2
ということは、
Σ1/k^2=π^2/3!=π^2/6
そうか、オイラーは「6」を見ただけで、「3!」を連想し、
そこから、「sinxの級数」を連想して、
「sinx/xの級数」を作ってしまったということか???
オイラーは18世紀の人間AIだ。
論理性・厳密性は多少おいといて、
驚異的な連想能力
・知識連携力・暗算力・式変形力だ。
課題:オイラーが1731年に見つけた式で、バーゼル問題に迫る勢いを実感しよう。
[IN]Python
#euler1731年の発見
import numpy as np
def euler_1731(max_k):
ln2_sq = (np.log(2)) ** 2 #定数(ln2)^2
euler_sum = 0.0
# 比較レポート作成
print(f"{'項数 (K)':<13} | {'オイラー式の値':<20} | {'地道な和 (1/k^2)':<25}")
print("-" * 75)
raw_sum = 0.0
for k in range(1, max_k + 1):
euler_sum += 1 / (k**2 * (2**(k-1)))
raw_sum += 1 / k**2
if k in [1, 3, 5, 10, 14]:
final_euler = euler_sum + ln2_sq
print(f"k = {k:<11} | {final_euler:.12f} | {raw_sum:.12f}")
euler_1731(14)
print(f"\n【ゴールは π^2 / 6 】: {np.pi**2 / 6:.12f}")
[OUT]
項数 (K) | オイラー式の値 | 地道な和 (1/k^2)
---------------------------------------------------------------------------
k = 1 | 1.480453013918 | 1.000000000000
k = 3 | 1.633230791696 | 1.361111111111
k = 5 | 1.643543291696 | 1.463611111111
k = 10 | 1.644920051674 | 1.549767731167
k = 14 | 1.644933580707 | 1.575995839001
【ゴールは π^2 / 6 】: 1.644934066848
課題:この比較をgeogebraでやるにはどうしますか。
特別な工夫はいりません。
計算の負荷が低いのでスムーズに項数を増やすことができます。
設定:表示する小数点以下の桁数を10にしましょう。
n = slider(1,20,1)
ln2sq=ln(2)^2
Eu= sum(1/(k^2 2^(k-1)),k,1,n)+ln2sq
Ba= sum(1/k^2,k,1,n)
Goal=pi^2/6
difEu=Goal-Eu
difBa=Goal-Ba
text1="バーゼル問題のゴール値\\
\frac{π^2}{6}="+Goal+"\\
に対して、\\
素朴計算値との差="+difBa+"\\
オイラー式との差="+difEu
カーソルを少し動かすだけで、
オイラーの、数たち、式たちをつなぐ力のすごさが伝わってきます。
バーゼル問題のオイラー高速近似
<振り返り>
時代が前後したのでオイラー業績を振り返ろう。
1731年にバーゼル問題の解決の着想を得た。
1735年「逆数の級数の和について」でバーゼル問題の有名な解法を発表した。
1737年「無限級数に関する様々な観察」でゼータ関数のオイラー積の発見と素数の無限性の証明。
最初の記述ではΠp∞Σn=0∞(1/p)n=Σn=1∞1/nとしましたが。左辺はΠp(1-1/p)-1となります。
つまり、ゼータ関数ζ(s)=Σn=1∞1/n^sとおくと、
ζ(1)=Πp(1-1/p)-1
ゼータ関数のs=1のときのオイラー積(素数を使った無限積)によって素数の無限性を証明しました。
それだけではありませんでした。
ζ(s)=Σn=1∞1/n^s=Πp(1-1/p^s)-1
一般のゼータ関数ではnの指数sがオイラー積の素数の指数sにつくというとても美しい結果も
発見していたのです。
これが、リーマンが1859年からの研究につながり、
有名だが、まだ解決されていない問題、リーマン予想
ゼータ関数を複素数に拡張したとき、「零点はすべて実部が1/2になる」
につながるのですね。