代码改变世界

关于Frobenius Number[整理]

2007-10-13 21:10  老博客哈  阅读(2385)  评论(5编辑  收藏  举报

                                                             关于Frobenius Number
                                                                                           农夫三拳@seu

     给定n(≥2)个正整数a1,a2,…,an ,它们的最大公因数为1.求使不定方程a1x1+a2x2+…+anxn=F没有非负整数解(x1,x2,…,xn)的最大正整数F.这个数称为a1,a2,…,an的最大不可表数,记作F(a1,a2,…,an)。可以在wolfram上找到一些关于Frobenius Number的资料。除此以外,与Frobenius Number的问题非常多,例如Coin ProblemMcNugget NumberPostage Stamp Problem等等。

一、当数字达到1的时候

这种情况最简单,任何非负整数都可以表示

二、当数字达到2的时候,这个可以推出公式

若(a,b)=1,且a>=1,b>=1,则不能用a*x+b*y(x>=0,y>=0)表示的最大整数
F(a,b)=a*b-a-b 
并且可以得到不能用a*x+b*y(x>=0,y>=0)表示的非负整数的个数为(a-1)*(b-1)/2

这个公式的证明方法很多,可以参见曙光上袁豪的《关于px+qy类命题的研究
另外一个证明可以看wiskey的blog 笔记

三、当数字达到3的时候,整理一下我从论文中看到的一些结论。

3.1. F(a,b,c) <= ab / (a,b) + c * (a, b)  - a - b - c,且当c>ab / (a,b)^2 - a / (a, b) - b / (a, b)时成立。

推论1:如果(a, b) = 1, c > F(a, b),则F(a, b, c) = F(a, b)
推论2:设a=p * u, b= u * q, c = p * q, p > 0, q > 0, u >0, (p, u)=(p, q) = (q, u) = 1,则F(a, b, c) = 2 * p * q * u - q * u - p * q - p * u


四、当数字达到4的时候,我查阅了国内的一些论文,至少有如下的一些特殊情况下的推论。

4.1.  设(a1, a2, a3) = 1, (a1, a2) = d, a1 = d*a1', a2 = d * a2' , 3元一次不定方程  a1*x1+a2*x2+a3*x3 = n  的全部解可表示为

x1 = X1 + a2'*t1 - u1*a3*t2
x2 = X2 - a1'*t1 - u2*a3*t2
x3 = X3 + d * t2

其中X1, X2, X3是该3元不定方程的一组解,t1,t2为任意整数,u1,u2满足a1’u1+a2’u2 = 1

4.2. 设(a1, a2, a3, a4)=1, (a1, a2, a3) = d, a1 = d*a1', a2 = d*a2', a3 = d * a3', (a1', a2') = d', a1' = d'*a1'', a2'=d'*a2'', 4元一次不定方程
a1*x1+a2*x2+a3*x3+a4*x4=n的全部解可以表示为

x1 = X1 + a2''*t1 - u1'*a3'*t2 - u1*a4*t3
x2 = X2 - a1''*t1 - u2'*a3*t2 - u2 * a4 * t3
x3 = X3 + d' * t2 - u3 * a4 * t3
x4 = X4 + d * t3

其中X1,X2,X3, X4是4元一次不定方程的一组解,t1,t2,t3为任意整数,u1,u2,u3满足a1’*u1+a2'*u2+a3'*u3=1,u1',u2'满足a1''*u1' + a2''*u2'=1。 

推论: 如果x1, x2, x3, x4是上面的4元一次不定方程的任意一组解,易得
x1,x2,x3也是上面的3元一次不定方程的一组解。

4.3. 在2当中的4元一次不定方程中,如果a1>=a2,a1'>=a4,则
F(a1,a2,a3,a4) <= 2*a1*a2*a3 / (a1,a2,a3)^2 + a4*(a1,a2,a3)-a1-a2-a3-a4
且当
a4 > 4*a1*a2*a3/(a1,a2,a3)^2 - a1/(a1,a2,a3) - 2*a2/(a1,a2,a3)-2*a3/(a1,a2,a3)
时有
F(a1,a2,a3,a4)=2*a1*a2*a3+a4*(a1,a2,a3)-a1-a2-a3-a4

五、当数字n>4以后,至少有如下定理

5.1 F(a1,...,an-1, an)=d*F(a1/d, ..., an-1/d, an) + (d-1)*an
其中d=(a1, ..., an-1)

5.2 F(a1,...,an-1, an)<=d*F(a1/d, ..., an-1/d) + (d-1)*an
当an = a1/d*b1 + ... + an-1/d * bn-1, bi>=0(i=1,..., s-1)都是整数时,等号成立,即F(a1,...,an-1, an)=d*F(a1/d, ..., an-1/d) + (d-1)*an
其中d=(a1,...,an-1)

推论1: 若 an>F(a1/d, ..., an-1/d),则F(a1,...,an-1, an)=d*F(a1/d, ..., an-1/d) + (d-1)*an 。其中d=(a1,...,an-1)

推论2: 若(a1,...,an-1) = 1, an=a1*b1+...+an-1* bn-1, bi>=0(i=1,...,n-1)都是整数,则F(a1,...,an-1, an)=F(a1,...,an-1),特别地,当an>F(a1,...,an-1)时,结论也成立

推论3: 设ai=b1...bi-1bi+1...bn,bi>0, (bi,bj)=1, (i不等于j), (i=1,...,s),则
F(a1,...,an-1, an)<=(n-1)*b1*b2*...*bn-sigma(ai)


尾记:
关于Frobenius Number 的题目,我找到了以下两题(其他题目欢迎补充)
1.  A new Change Problem
http://acm.hdu.edu.cn/showproblem.php?pid=1792
解法:  这个就是 Frobeinus Number的二维版本, 即F(a,b) = a * b - a - b  N(a, b) = (a - 1) * (b - 1) / 2
(注: N(a1, a2, ... an)表示a1x1+a2x2+...+anxn不能表示的数的个数)
2.  Frobenius
http://acm.hnu.cn:8080/online/?action=problem&type=show&id=11012&courseid=0
解法:  这个就是Frobenius Number的四维版本了,题目让求F(a, b, c, d) 和 N(a, b, c, d),其中限定了
a,b,c,d的范围在[0,10000], 且只要求返回106以内的F(a, b, c, d)和N(a, b, c, d),如果F(a, b, c, d)
超过106,则输出-1 。 这个题目可以使用递推搞定,不妨设f[i]为true的时候表示i这个数字能够用a,b,c, d表示,
那么有F[0] = true, F[i] = F[i - a] | F[i - b] | F[i - c] | F[i - d] (i >= max(a, b, c, d)) 。然后在106以内
统计N(a, b, c, d)的个数即可。那如何求解F(a, b, c, d)呢?当时做题目的时候看到sample output中的F(a, b, c, d)
刚好是N(a, b, c, d)的两倍减去1,再联系F(a,b) = a * b - a - b, N(a, b) = (a - 1) * (b - 1) / 2,刚好
F(a, b) = 2 * N(a, b) - 1。于是就用2 * N(a, b, c, d) - 1来和106以做比较,竟然过了(后来发现这样是有问题的,并不是简单的两倍减1的关系,例如a=3,b=4,c=5,d=6时,1和2不能表示,即N(3, 4, 5, 6)=2,而F(3, 4, 5, 6)=2而不等于2*F(3,4,5,6)-1 。到底啥联系我也不知道:-(  )。 那么求解F(a, b, c, d)其实我们可以把范围限定在106 +104 以内,我们可以断言,如果在106 +104 以内找到的当前不能表示的最大的数没有超过106,那么后面所有的大于106 的数都可以表示,这个应该很好理解的吧:-) 可以反证,如果某个数不可以表示,那么该数减去a,b,c,d也不能表示,等等。
至此至少这个问题被成功的解决了。 但是如果把范围去掉,那就NP问题了,就不好那么做了。