数論#
数論(number theory) (整数論 とも)は、数について研究する分野。
代数学に限らず、解析学・幾何学にも関わりがあるため、
代数的整数論
解析的整数論
数論幾何学
といった分野がある
代数的整数論#
「代数的整数」を研究する分野。(代数的に整数論を扱うわけではない)
定義(代数的整数)
最高次の係数が\(1\)の整数係数の方程式
の解となる複素数を、 代数的整数 という
\(\sqrt{2}\)は\(x^2-2=0\)の解 → 代数的整数
\(a\)は1次方程式\(x-a=0\)の解 → 代数的整数
ガウス整数#
整数\(a,b\)と虚数単位\(i\)を用いた\(a + bi\)という形の複素数は、2次方程式
の解になっている → 代数的整数である
このような複素数を ガウス整数 と呼ぶ。整数はすべて\(b=0\)とした場合のガウス整数であるため、 ガウス整数は整数の拡張 である。
解析的整数論#
解析的整数論は、複素解析やフーリエ解析などの解析的な手法で整数論を研究する分野。(「解析的整数」があるわけではない)
素数定理#
素数定理
正の実数 \(n\) に対して、 \(\pi(n)\) を \(n\) 以下の素数の個数とする。このとき、
である。
実際、非常にゆっくりであるが1に収束していっていることがわかる
def pi(n: int) -> int:
"""エラトステネスの篩をもとに、n以下の素数の個数を数える"""
# 1. 長さn+1の配列を用意し、0番目と1番目の要素にFalseを、2番目以降すべてにTrueを入れる(0,1は素数でないため)
is_primes = [True] * (n + 1)
is_primes[0] = is_primes[1] = False
# 2. 2からsqrt(n)までの数について、その数が素数なら、その倍数はFalse(素数でない)とする
for i in range(2, int(n**0.5) + 1):
if is_primes[i]:
for j in range(i * i, n + 1, i):
is_primes[j] = False
return sum(is_primes)
import numpy as np
results = []
for k in range(1, 7):
n = 10 ** k
n_prime = pi(n)
x = n/np.log(n)
results.append({"n": n, "π(x)": n_prime, "x/log(x)": round(x, 1), "π(x)/{x/log(x)}": round(n_prime/x, 3)})
import pandas as pd
pd.DataFrame(results)
n | π(x) | x/log(x) | π(x)/{x/log(x)} | |
---|---|---|---|---|
0 | 10 | 4 | 4.3 | 0.921 |
1 | 100 | 25 | 21.7 | 1.151 |
2 | 1000 | 168 | 144.8 | 1.161 |
3 | 10000 | 1229 | 1085.7 | 1.132 |
4 | 100000 | 9592 | 8685.9 | 1.104 |
5 | 1000000 | 78498 | 72382.4 | 1.084 |
ゼータ関数#
ゼータ関数
実部が 1 より大きい複素数 \(s\) に対して定義される ゼータ関数 とは、
で表される関数のことをいう。
例:
\(s=2\)だと、
偶数の\(s\)に対してはある程度きれいな形の無理数で表せることが知られているが、奇数の\(s\)に対しては一般に無理数であるかどうかもわからない。\(\zeta(3)\)が無理数であることは1978年にAperyによって証明された。
\(\zeta(s)=0\)になるような\(s\)のことを、ゼータ関数の 零点 (れいてん)という。負の偶数\(-2,-4,\cdots\)がゼータ関数の零点であることは知られていた(自明な零点という)が、これら以外の零点(非自明な零点)にどのようなものがあるのかは長年の問いだった。見つかったものはすべて実部が\(\frac{1}{2}\)だった、つまり
という形だった。これはリーマン予想という難問であり、現在も未解決のまま残っている。
リーマン予想
ゼータ関数 \(\zeta(s)\) の非自明な零点は、すべて実部が \(\frac{1}{2}\) であろう。
数論幾何学#
代数幾何学を用いて整数論を研究する分野。
フェルマーの最終定理#
有名な難問。
フェルマーが17世紀に本のページの隅に命題だけ残したもの。1995年にワイルズが証明。