【发布时间】:2014-12-20 16:20:23
【问题描述】:
我有一个家庭作业要求我检查任意三个数字 a,b,c 是否满足 0
为了使这成为可能,目标数字 c,必须能够以以下形式表示:
c = xa + yb
通过一些测试,我发现x和y的值不能相等,也不能同时是偶数,这样我才能达到数字c。请记住这一点,以及一些涉及 a、b 或 c 等于零的特殊情况。
有什么想法吗?
编辑: 这不是欧几里得算法,也不是丢番图方程,也许我用 c = xa + yc 的说法误导了你。即使他们应该满足这个陈述,但这对于手头的任务来说是不够的。
以a=2、b=3、c=10为例。为了达到 c,您需要在第一步中将 a 添加到 b 或 b 到 a,然后在第二步中您将得到:a = 2, b = 5 或 a = 5, b = 3 ,如果你继续这样做,你将永远无法达到 c。 Euclid 的算法将提供输出 yes,但很明显,通过将 2 和 3 相加,您无法达到 10。
【问题讨论】:
-
我知道那些给我错误输出的 4 应该归类为“NO”,而我的代码将它们归类为“YES”。 什么 4?跨度>
-
好像你在搜索扩展欧几里得算法(en.wikipedia.org/wiki/Extended_Euclidean_algorithm)或者中国剩余定理(en.wikipedia.org/wiki/Chinese_remainder_theorem)
-
@quant 为什么选择 CRT?这只是扩展欧几里得,对吧?
-
为什么你认为
x和y不能都相等?如果c是偶数,我认为没有理由消除这种情况,除非您忽略了原始问题的其他一些有趣特征。 -
@ajb 是的,必须有另一个条件,我似乎无法将目光放在它上面。我正在考虑优化递归,但本课程不涉及散列,因此必须有一个没有它的解决方案。如果我没有找到更简单的方法,我会尝试动态编程方法。