前言
给定两个整数
a
a
a和
b
b
b,存在整数
d
d
d,使得
d
∣
a
d|a
d∣a并且
d
∣
b
d|b
d∣b。即
d
d
d同时整除
a
a
a和
b
b
b,我们把
d
d
d叫做
a
a
a和
b
b
b的公因数,满足条件的
d
d
d的最大值,叫做
a
a
a和
b
b
b的最大公因数(GCD)。 通过辗转相除法或者错位相减法,可以在多项式时间内求出
a
a
a和
b
b
b的最大公因数。 现在,我们考虑,
a
a
a和
b
b
b在传输的过程中出现了一些小错误。得到
a
′
=
a
+
e
1
a^\prime=a+e_1
a′=a+e1?和
b
′
=
b
+
e
2
b^\prime=b+e_2
b′=b+e2?,那么是否可以在多项式时间内求出
d
d
d。这就是站在解码的角度的近似公因数问题。
定义
论文:《Approximate Integer Common Divisors》中仔细讨论了这个问题。 更加正式的描述如下: 给定两个整数
a
0
a_0
a0?和
b
0
b_0
b0?,参数
X
,
Y
,
M
X,Y,M
X,Y,M。近似公因数问题是寻找这样一个或者所有的
d
>
M
d>M
d>M,使得
d
∣
(
a
0
+
x
0
)
d|(a_0+x_0)
d∣(a0?+x0?)和
d
∣
b
0
+
y
0
d|b_0+y_0
d∣b0?+y0? ,其中
∣
x
0
∣
≠
X
|x_0| \neq X
∣x0?∣?=X,
∣
y
0
∣
≠
Y
|y_0| \neq Y
∣y0?∣?=Y。 不妨设
X
≥
Y
X \geq Y
X≥Y,如果
Y
=
0
Y=0
Y=0,那么问题叫做部分近似公因数问题(Partially Approximate Common Divisor Problem,PACDP);如果
Y
>
0
Y>0
Y>0那么叫做一般的近似公因数问题(General Approximate Common Divisor Problem,GACDP)。
应用
解决该问题的算法,可以用来设计纠错码。由于问题本身是一个困难的问题,所以也有基于该问题设计的密码算法。
|