这篇博文对连分数理论和逼近算法做进一步研究
连分数逼近算法
连分数与渐进分数的差
x=an+1′qn+qn−1an+1′pn+pn−1 x−qnpn=qn(an+1′qn+qn−1)(−1)nx−q0p0=x−a0=a1′1 根据前面的引理, q1′=a1′,qn′=an′qn−1+qn−2 (1<n⩽N) specialaN=aN′qN′=qN
if 1⩽n⩽N−1,then x−qnpn=qnqn+1′(−1)n
aN=1,aN−1′=aN−1+aN1=aN−1+1
i)
研究 ∣∣∣∣∣qnpn−qnx∣∣∣∣∣=qnqn+1′1⇔∣pn−qnx∣=qn+1′1 注意 qn+1′ 的性质就可以了
ii)
q0=1,q1=a1,q2=a2q1+q0=a1a2+1q1=a1<a1′<a1+1⩽a1a2+1=q2 qn+1′=an+1′qn+qn−1,an+1<an+1′<an+1+1 1⩽n⩽N−2,we have {qn+1′=an+1′qn+qn−1>an+1qn+qn−1=qn+1qn+1′<an+1an+qn+qn−1=qn+1+qn⩽an+2qn+1+qn=qn+2
qn+21<∣pn−qnx∣=qn+1′1<qn+11 ∣pN−qN−1x∣=qN1,pN−qNx=0 ⎩⎪⎪⎪⎨⎪⎪⎪⎧qn+21<∣pn−qnx∣<qn+11qn+31<∣pn+1−qn+1x∣<qn+21
∣qnx−pn∣ 呈递减关系
specially, we have qN−1′=(aN−1+1)qN−1+qN−3=qN−1+qN−2,aN=1 qN−1′=qN
qN 递增, 所以又有
∣∣∣∣∣x−qnpn∣∣∣∣∣ 递减
逼近的结论
qn+1>qn,qnx−pn=qn+1′(−1)n qn+1′=an+1qn+qn−1,qn+1′>qn+1 qn+1′1<qn+11⇒qn+1′1=qn+11⋅δn(0<δn<1)
qnx−pn=qn+1(−1)nδn(0<δn<1)
连分数的极限
n>3,qn⩾n∣∣∣∣∣q2np2n−q2n−1p2n−1∣∣∣∣∣=q2nq2n−11⩽2n(2n−1)1→0
Farey数列
重要的结论
定理1 如果 h/k 和 h′/k′ 是 Fn 中相邻的项, 那么
kh′−hk′=1
定理2 如果h/k, h′′/k′′, h′/k′ 是 Fn 中 3 个相连的项, 那么
k′′h′′=k+k′h+h′
定理3 如果 h/k 和 h′/k′ 是 Fn 中相连的两项, 那么
k+k′>n
如果定理2成立, 定理3必然成立, 因为
k+k′h+h′
落在区间
(kh,k′h′)
中, 除非 k+k′>n 成立, 否则违背 h/k,h′/k′ 是相邻两项
proof1
数学归纳法, 假设对于 Fn−1 两个相连的项 h/k,h′/k′ 成立, 在 Fn 中它们被 h′′/k′′ 隔开
kh′′−hk′′=r>0,k′′h′−h′′k′=s>0根据归纳假设,kh′−hk′=1 (h′′,k′′)=1,⇒(s,r)=1 ⇒h′′=sh+rh′,k′′=sk+rk′ 考虑分数集合 S KH=μk+λk′μh+λh′,(μ,λ)=1 这是一个既约分数, 如果不是的话, 不妨设 m∣s(μh+λh′)+t(μk+λk′),∀s,t k(μh+λh′)−h(μk+λk′)=λh′(μh+λk′)−k′(μh+λh′)=μ ⇒m∣μ, m∣λ 在 S 中取值使得 K 最小,λ=1,μ=1h′′=h+h′, k′′=k+k′
proof2
构造法, 假设 h/k 后面的项不是 h′/k′ , 不妨假设是 x/y, 那么有
kx−hy=1 因为 (h,k)=1,kx−hy=1 有整数解 另一方面, h/k 和x/y 是相连的两项, 那么 k+y>n⇔y>n−ky<n 方程的解不妨设为x0,y0 x0+th, y0+tk,∀t 成立, 满足 0⩽n−k<y⩽n 当然可以取得到
kx−hy=1⇔yx=kh+ky1>kh kx−hy⩾1,x/y 位于 h/k 的后面 三个 Farey 项的排列是 {kh,k′h′,yx} yx−k′h′=k′yk′x−h′y⩾k′y1 k′h′−kh=kk′h′k−k′h⩾kk′1 ky1=kykx−hy=yx−kh⩾k′y1+kk′1=kk′yk+y>kk′yn⩾ky1 矛盾, 所以x/y=h′/k′
Farey算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void findNext() { example: 4/9 get one solution of 9x-4y=1 (x0, y0) = (1, 2)
let 13-9 < 2+9r < 13 enumerate r = 1 x = 1 + 4r = 5 y = 2 + 9r = 11
5/11 is the answer }
|
初等数论相关算法
素数筛法
Eratosthenes筛法,用v[x]标记合数
从 x 开始 {x2,(x+1)x,…,[N/x]⋅x}标记为合数
1 2 3 4 5 6 7 8 9
| int v[maxn]; void primes(int n) { Set(v, 0); _rep(i, 2, n) { if(v[i]) continue; cout << i << endl; _rep(j, i, n / i) v[i * j] = 1; } }
|
线性筛法,标记最小素因子
i) 记录当前数的最小素因子 v[x] ii) 用递增素数列 primes 维护[2,x] 已产生的素数集合 iii) p∈primes,p=primes[j], 在 x 的基础上, 累乘一个最小质因子 p需满足, p⩽v[x],p 是 i⋅p 的最小素因子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int v[maxn]; void primes(int n) { Set(v, 0); vector<int> prime;
_rep(x, 2, n) { if(v[x] == 0) { v[x] = x; prime.push_back(x); } _for(i, 0, prime.size()) { if(prime[i] > n / x || prime[i] > v[x]) break; v[x * prime[i]] = prime[i]; } }
_for(i, 0, prime.size()) cout << prime[i] << endl; }
|
Fermat数用于逼近
Fn=22n+1 没有大于1的公约数
x=22n FnFn+k−2=22n+122n+k−1=x+1x2k−1 =x2k−1−x2k−2+⋯−1 m∣Fn,m∣Fn+k,⇒m∣(Fn+k−2) ⇒m∣2,2∣Fn⇒m=1
{F1,F2,⋯,Fn}能够被一个奇素数整除, 并且这些奇素数互不相同 pn+1⩽Fn=22n+1
代数恒等式
al+1akl+1=a(k−1)l−a(k−2)l+⋯+1
Euclid定理的代数证明
N(x)表示不超过 x , 并且不能被任何 p>pj 素数整除的数 n 的个数
n=n12m, m 无平方因子 m=2b13b2…pjbj, bj={0,1}, 有 2j 种不同的取值 n12⩽n⩽x⇒n1⩽n⩽x m有 2j 种取值, n1有x种取值, N(x)⩽2jx
如果素数有限, 那么设所有素数为 {2,3,⋯,pj} 对于每个 x , 要么被 [2,pj] 中的一个整除, 要么 x 本身是素数 N(x)=x, ⇒x⩽2jxx⩽222j,这个对 x⩾222j+1 不成立
素数相关的级数的敛散性
∑p1=21+31+51+71+… 发散, 证明如下 x−N(x) 表示{⋯n⋯x}中能够被{pj+1,pj+2,⋯}整除的数的个数 pi+1x+pj+2x+…<21x,x−N(x)<21x 21x<N(x)⩽2jx,x<22j+2 let x⩾22j+2, 结论不成立
π(x)性质
π(x)表示不超过 x 的素数的个数
let j=π(x),这个 j 是可以取到的, we have pj+1>x,N(x)=x x=N(x)⩽2π(x)x⇒2π(x)⩾x π(x)⩾2ln2lnx x=pn,π(x)=n⇒pn⩽4n
素数公式进一步结果
不存在任何非常数的整系数多项式 f(n), 使得它对充分大的 n, 都取素数值
proof
x>N,f(x)=a0xk+…=y>1 ∀r,f(ry+x)=a0(y+x)k+…=a0(y)k+⋯+(a0xk+⋯) y∣f(ry+x),r→∞,f(ry+x)→∞ f(n)取的到无穷多合数
整数模
除了 0 模以外, 任何模都是某个正数 d 的整数倍构成的集合
a∈S,b∈S,⇒xa+yb∈S d 是 S 中的最小正数, ∀z,n−zd∈S 记余数是 c ,0⩽c<d,假设 d 最小, 因此 c=0,n=zd
Galois理论角度理解
能以多于一种方式分解成素数乘积的数称为非正规数
设 n 是最小的非正规数, 同一个素数 p 不可能同时在因式分解中出现 否则 n/p 就是非正规数, n/p<n we haven=p1p2p3⋯=q1q2⋯, pi=qj p12⩽n, q12⩽n⟹p1=q1 p1q1<n N=n−p1q1, 0<N<n,N为正规数 p1∣N,q1∣N, ⇒(p1q1)∣N ⇒(p1q1)∣n q1∣(n/p1),but (n/p1)<n 为正规数 n/p1有唯一的素数分解 p2p3⋯⇒n=p1p2⋯唯一