实数的最优逼近_笔记
连分数
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
k≥1,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=akpk−1+pk−2qk=akqk−1+qk−2
中间分数
称
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+qk−1npk+pk−1,其中(0≤n≤ak+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<b≤q,a,b∈Z ,且
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} |
∣x−ba∣>∣x−qp∣
则称
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<b≤q,a,b∈Z,且
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} |
∣x−ba∣>bq∣x−qp∣
这说明第二类最优逼近是一个强于第一类的限制,
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,n⇔rk+2>qk/qk−1。
意思就是
[
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/qk−1 。
证明不会。
康康题目
题目描述
一个 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(k≤n,k∈N∗) ,将数轴上所有整数和所有 a k ( k ≤ n , k ∈ N ∗ ) a_k(k\leq n, k\in \mathbb{N}*) ak(k≤n,k∈N∗) 对应的点都描出。求线段中最短的一条所在的位置。
分析
这个就找距离 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();
}