一个数以最少步骤分解为另外两个数和差问题的解决
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.
对于多个数的情况,也可以使用多元不定方程类似解决。
这类题的解题理论是数论里面的一次不定方程的整数解。
引用 百度百科:
定义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.
对于多个数的情况,也可以使用多元不定方程类似解决。
相关文章推荐
- 一个数以最少步骤分解为另外两个数和差问题的解决
- 一个数以最少步骤分解为另外两个数和差问题的解决
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- 新问题: 两个样式对同一个元素操作,为什么最新的样式没有起作用?(已解决)
- 一个Myeclipse中配置两个tomcat中问题的解决
- 北京地铁站点遍历最少经站次数问题普遍意义上是一个NP问题,目前不存在多项式时间算法能够解决该问题
- 解决“listView点击一个Item,另外几个Item也跟着改变”的问题
- 问题需要反过来想,oracle连接问题的一个另外的解决办法。
- Android studio导入另外一个项目作为Library后出现两个启动项目等各类问题
- 解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
- 同一个listview上下展示不同布局,解决两个listview上下显示不全问题
- 两个同子域,一个子域访问另一个子域下接口,解决form验证的问题
- Liferay 集群中在一个节点上上传照片另外一个节点无法看到的问题的解决
- display不能解决<jsp:include />的问题,jsp异步加载另外一个jsp页面
- 发布一个史上最简单代码最少Javascript Timer,解决一切定时执行的问题
- 在url中传递汉字到另外一个页面后,出现中文乱码的问题解决
- android 两个videoGroup中同时只能选中一个问题的解决
- 通过iframe引入另外一个项目中的html片段到项目中,解决样式,高度,兼容等问题的策略
- 通过iframe引入另外一个项目中的html片段到项目中,解决样式,高度,兼容等问题的策略
- 解决firefox一个邮箱两个账户导致收藏夹不同步的问题