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