受Cheap,Fast,Good的启发,我们将要实现一个算法,其中恰好有两个。
数学
给定两个非零整数a和b,GCF d是将a和b均除而无余的最大整数。贝索特系数是整数对(x,y),因此ax + by = d。贝索特系数不是唯一的。例如,给定:
a = 15, b = 9
我们有
d = 3
x = 2
y = -3
自从15*2 + 9*(-3) = 30 - 27 = 3
。
计算GCF和一对Bézout系数的常用方法是使用Euclid算法,但这绝不是唯一的方法。
编码
您的程序应采用两个整数作为输入。它应该输出/返回最大公因数和一对Bézout系数。
输入示例:
15 9
示例输出
3 (2, -3)
输出可以采用任何顺序和格式,但是应该清楚哪些是GCF,哪些是系数。
人手不足
您的程序具有便宜,快速和优质的潜力。不幸的是,一次只能是两个。
- 当它不便宜时,程序应使用过多的系统资源。
- 如果速度不快,程序将花费大量时间。
- 如果不好,程序输出应该是错误的。
该程序应该能够执行(很好,不能执行)这三个操作。取决于您的时间,这取决于时间,编译器,输入较大等。一些其他说明:
- 您的程序不应被明显欠缺,应该通过粗略的检查。如果您实现了三个单独的算法,我会有点怀疑。
- 在便宜的情况下,“过多的系统资源”会减慢其他程序的速度。可能是内存,带宽等。
- 在快速情况下,“时间过长”是指相对于便宜和良好情况下的时间而言。该程序仍应完成。您越接近“令人难以置信的挫败感,但没有挫败到足以阻止程序的程度”(更好,更好)。
- 在良好的情况下,输出应该不会明显错误,并且应该通过粗略的检查。如果它给我的GCF为“ 2 anna half”,我会非常怀疑。
这是一次人气竞赛,因此大多数投票都获胜!
编辑
为了明确起见,我正在寻找在不同情况下可以“快速又便宜” , “便宜又好” 和 “快速又好”的程序,而不是仅执行其中之一的程序。