Computer >> Máy Tính >  >> Lập trình >> Python

Tìm sự khác biệt nhỏ nhất giữa các bảng đã thay đổi của hai số trong Python


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