Giả sử chúng ta có hai số p và q, chúng ta phải tìm hiệu số nhỏ nhất giữa bất kỳ số hạng nào trong bảng vô hạn đã dịch chuyển của p và q, các dịch chuyển này là r và s, trong đó r, s> =0.
Vì vậy, nếu đầu vào là p =7 và q =17, r =6 và s =3, thì đầu ra sẽ là 0 như bảng 7 =[7, 14, 21, 28, 35, 42, 49, ...] và bảng 17 =[17, 34, 51, 68, 85, 102, 119, ...], sau đó chuyển bảng 7 sẽ là [13, 20, 27, 34, 41, 48, 55 , ...] và bảng đã chuyển của 17 sẽ là [20, 37, 54, 71, 88, 105, 121, ...], khi đó hiệu số nhỏ nhất giữa hai số hạng của các bảng đã chuyển này là 20-20 =0.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
g:=gcd của (p, q)
-
sự khác biệt:=| r-s | mod g
-
trả lại mức chênh lệch tối thiểu và g - chênh lệch
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
import math def get_minimum_diff (p, q, r, s): g = math.gcd(p,q) difference = abs(r-s) % g return min(difference, g - difference) p = 7 q = 17 r = 6 s = 3 print(get_minimum_diff(p, q, r, s))
Đầu vào
7,17,6,3
Đầu ra
0