实数的最优逼近_笔记

连分数

x x x 为一个实数,它的连分数写成:
x = a 0 + 1 a 1 + 1 a 2 + 1 a 3 + 1 ⋱ + 1 a n x=a_0+\cfrac{1}{a_1+\cfrac{1}{a_2+\cfrac{1}{a_3+\cfrac{1}{\ddots+\cfrac{1}{a_n}}}}} x=a0+a1+a2+a3++an11111
我们简记成
x = [ a 0 , a 1 , a 2 , . . . , a n ] x=[a_0,a_1,a_2,...,a_n] x=[a0,a1,a2,...,an]
我们约定对于 k ≥ 1 , a k ≠ 0 k\ge 1,a_k\ne0 k1,ak=0,它满足一些显然的性质比如
[ a 0 , a 1 , a 2 , . . . , a n ] = a 0 + 1 [ a 1 , a 2 , a 3 , . . . , a n ] [a_0,a_1,a_2,...,a_n]=a_0+\cfrac{1}{[a_1,a_2,a_3,...,a_n]} [a0,a1,a2,...,an]=a0+[a1,a2,a3,...,an]1
r k = [ a k , a k + 1 , . . . , a n ] r_k=[a_k,a_{k+1},...,a_n] rk=[ak,ak+1,...,an] ,后面会用到(

对于一个有理数 x x x ,它的连分数就直接暴力求了(也叫辗转相除法。

那么对于一个无理数呢,比如:
2 = [ 1 , 2 , 2 , 2 , 2 , . . . ] , 3 = [ 1 , 1 , 2 , 1 , 2 , 1 , 2 , . . . ] \sqrt{2}=[1,2,2,2,2,...],\sqrt3=[1,1,2,1,2,1,2,...] 2 =[1,2,2,2,2,...],3 =[1,1,2,1,2,1,2,...]
有些无理数的连分数很简单的,也比较好推。像 π \pi π 这种就只能暴力算了。

渐近分数

我们把连分数保留到 a k a_k ak 的近似记作 s k s_k sk ,称作一个连分数的第k个近似或者第k个截断,把 s k = [ a 0 , … , a k ] s_k=[a0,…,ak] sk=[a0,,ak] 写成分数 p k / q k p_k/q_k pk/qk ,就称为连分数的第 k k k 个渐近分数或者 k k k 阶渐近分数。

渐近分数可以递推来求。
{ p k = a k p k − 1 + p k − 2 q k = a k q k − 1 + q k − 2 \begin{cases} p_k=a_kp_{k-1}+p_{k-2}\\ q_k=a_kq_{k-1}+q_{k-2} \end{cases} {pk=akpk1+pk2qk=akqk1+qk2

中间分数


F k , n = n p k + p k − 1 n q k + q k − 1 , 其 中 ( 0 ≤ n ≤ a k + 1 ) F_{k,n}=\cfrac{np_k+p_k−1}{nq_k+q_k−1},其中(0≤n≤a_{k+1}) Fk,n=nqk+qk1npk+pk1,(0nak+1)
为中间分数。简单来说就是 F k , n = [ a 0 , . . . , a k , n ] F_{k,n}=[a_0,...,a_k,n] Fk,n=[a0,...,ak,n]

最优逼近

我们定义第一类最优逼近如下:
对实数 x x x 与有理数 p / q p/q p/q ,若对 ∀ 0 < b ≤ q , a , b ∈ Z ∀0<b≤q,a,b∈Z 0<bq,a,bZ ,且 a / b ≠ p / q a/b≠p/q a/b=p/q均有
∣ x − a b ∣ > ∣ x − p q ∣ |x-\frac{a}{b}|>|x-\frac{p}{q} | xba>xqp
则称 p / q p/q p/q x x x 的一个第一类最优逼近。
简单来说,若所有分母不超过 q q q 的有理数都比 p / q p/q p/q 更远离 x x x ,那么 p / q p/q p/q 就是最优逼近。

定义第二类最优逼近 :
对实数 x x x 与有理数 p / q p/q p/q ,若对 ∀ 0 < b ≤ q , a , b ∈ Z ∀0<b≤q,a,b∈Z 0<bq,a,bZ,且 a / b ≠ p / q a/b≠p/q a/b=p/q 均有
∣ x − a b ∣ > q b ∣ x − p q ∣ |x-\frac{a}{b}|>\frac{q}{b}|x-\frac{p}{q} | xba>bqxqp
这说明第二类最优逼近是一个强于第一类的限制, p / q p/q p/q 不仅要比所有分母不超过 q q q 的有理数更接近 x x x,还要在乘上一个不小于 1 1 1 的倍数后仍然最接近 x x x

定理 1:第二类最优逼近一定是第一类最优逼近。

定理 2: 第二类最优逼近一定是渐近分数,且渐近分数一定是第二类最优逼近。
证明不难,但是很长,略了(

定理 3:第一类最优逼近一定是中间分数,且满足 F k , n ⇔ r k + 2 > q k / q k − 1 F_{k,n}⇔r_{k+2}>q_k/q_{k−1} Fk,nrk+2>qk/qk1
意思就是 [ a k + 2 , a k + 3 , . . . , a n ] > q k / q k − 1 [a_{k+2},a_{k+3},...,a_n]>q_k/q_k-1 [ak+2,ak+3,...,an]>qk/qk1
证明不会。


康康题目

题目描述

一个 n n n 项的正实数列 a 1 , 2 , . . . , n a_{1,2,...,n} a1,2,...,n,其中 a k = k 2 ( k ≤ n , k ∈ N ∗ ) a_k=k\sqrt{2}(k\leq n, k\in \mathbb{N}*) ak=k2 (kn,kN) ,将数轴上所有整数和所有 a k ( k ≤ n , k ∈ N ∗ ) a_k(k\leq n, k\in \mathbb{N}*) ak(kn,kN) 对应的点都描出。求线段中最短的一条所在的位置。

分析

这个就找距离 2 \sqrt2 2 最近的分数,要求分母 ≤ n \le n n

对于任意正实数 α \alpha α,它可能的第一类最优逼近都是中间分数,而 2 \sqrt2 2 的中间分数都不符合最优逼近的要求(或者你把中间分数的表打出来也行,反正数量级也是 l o g log log 的),那么我们只考虑渐近分数,分母 ≤ n \le n n 的渐进分数只有 O ( log ⁡ n ) O(\log n) O(logn) 个,直接打表即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[600],n,T;
void work(){
	cin>>n;
	for(int i=50;i>=1;i--)
		if(f[i]<=n){ cout<<f[i]<<'\n'; break; }
}
int main(){
	f[1]=1,f[2]=2;
	for(int i=3;i<=50;i++) f[i]=2ll*f[i-1]+f[i-2];
	cin>>T;
	while(T--) work();
}
posted @ 2022-10-10 20:18  缙云山车神  阅读(69)  评论(0编辑  收藏  举报