给出三个数字d,a,b和一个整数数组。我们可以将a或b加或减到d任意次。我们应该在数组中找到可以通过对d进行这些运算而形成的数字计数。
示例:如果数组为[14, 15, 63]
和d = 4
,a = 7
和b = 9;
则输出应为2。
如
14 = 4 + (9 - 7) + (9 - 7) + (9 - 7) + (9 - 7) + (9 - 7)
63 = 4 + 9 + 9 + 9 + 9 + 9 + 7 + 7
但是不能以任何组合获得15。因此输出为2。
请提出一种计算算法。提前致谢。
答案 0 :(得分:2)
只需在@ user3386109的评论中添加更多细节,
给出三个数字d,a,b和一个整数数组。我们可以将a或b加或减到d任意次。我们应该在数组中找到可以通过对d进行这些运算而形成的数字计数。
让数组中的元素为x
现在说x = d + a*i + b*j
,其中i和j是任何整数。如果这需要成立,则x - d = a*i + b*j
。
让我们看看右手术语该说些什么
Bézout的身份—设a和b为最大公约数为d的整数。然后,存在整数x和y,使得ax + by = d。通常,ax + by形式的整数恰好是d的倍数。
我们看到a*i + b*j
恰好是GCD(a,b)
的倍数。因此,像{AshutoshTiwari所指出的那样,差异x-d
必须被GCD(a,b)
整除。