您的位置:首页 > 其它

一个数以最少步骤分解为另外两个数和差问题的解决

2011-06-25 09:46 351 查看
有同学面试的时候遇到要求一个数以最少步骤分解为另外两个数和差问题的解决,大约描述是“将一个数分解为几个数的和或者差的形式,并且使步骤最小”。

这类题的解题理论是数论里面的一次不定方程的整数解。
引用 百度百科:
定义1. 形如 ax + by = c ( a,b,c∈Z,a,b不同时为零)的方程称为二元一次不定方程。
定理1. 方程 ax + by = c 有解的充要是 ( a,b ) | c;
定理2. 若( a,b ) = 1,且 x0,y0为 ax + by = c 的一个解,则方程的一切解都可以表示成
x=x0+t*b/(a,b)
y=y0+t*a/(a,b)

定理3. n元一次不定方程 a1x1 + a2x2 +…+ anxn = c,( a1,a2,…an,c∈N )有解的充要条件是:( a1,a2,…an ) | c.

例如将任意数分解5和7的和差形式,求最少需要多少次可以完成。
转换成数学描述就是求解
5a+7b=A
的整数解 a=a0+Xm, b=b0+Ym, 并且使|a|+|b|最小。

以求解123分解为5和7的组合为例:
1、验证:5和7的最大公约数(5,7)是1, 1|123, 可以计算。
2、使用辗转相除法
5a+7b=123,
a=(123-7b)/5 = 25-b-2(1+b)/5 令(1+b)/5=m得
b=-1+5m, a=25-(-1+5m)-2m = 26-7m
下面求最小的|a|+|b|.

m<=1/5或者m>=26/7时min(|a|+|b|)=min(|a-b|)=min(|27-12m|)取m整数值m=4,得min(|a|+|b|)=21

1/5<= m <=26/7时min(|a|+|b|) = min(a+b)=min(25-2m)取m=3得min(|a|+|b|)=19

可见取m=3时可得最小步骤为19次和差运算,且a=5,b=14, 即123=5*5+7*14.

对于多个数的情况,也可以使用多元不定方程类似解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐