【发布时间】:2020-10-19 15:38:33
【问题描述】:
随着离散数学的应用,在python中解决这个问题最快的算法是什么:
使用等式 ax + by = d,其中 a, b 和 d 是用户输入,在 |L 范围内搜索 x 和 y 的整数值对, R| (包括L和R)满足方程。
L 和 R 也是用户输入。
按升序输出 x 和 y 的所有可能值。如果没有可能的对,则打印 none。
案例一:
a = 1
b = 5
d = 40
L = 0
R = 10
Result:
0 8
5 7
10 6
案例 2:
a = 14
b = 91
d = 53
L = 1
R = 100
Result:
none
这是我的代码,但我相信有一种 更快的搜索方式。这太低效了。
a = int(input())
b = int(input())
d = int(input())
L = int(input())
R = int(input())
isNone = True
for x in range(L, R+1):
for y in range(L, R+1):
if (a*x) + (b*y) == d:
print(x, y)
isNone = False
if isNone: print("none")
有没有O(1)的算法?最快的方法是什么?
【问题讨论】:
-
您所参加的课程是否附带离散数学课本?它是否说明了这一点(可能称为“线性丢番图方程”)?
-
嗨,没听说过。
-
无需遍历
x和y:给定其中一个值,您可以轻松计算出另一个值。如果这是一个整数,并且在给定的范围内,那么您已经找到了解决方案。这将是 O(R-L) - 对于可以具有任意数量解决方案的问题,O(1) 算法是不可能的。 -
@jasonharper 它可以在 O(gcd(a,b)) 的复杂性中解决,假设所有数字都是有界的,这是 O(1)。那是linear diophantine equation。
-
@freakish 对不起,我是编程新手,我主要是蛮力解决这些类型的问题。获取 gcd 如何找到所有以 L、R 为界的对?
标签: python algorithm search discrete-mathematics