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

Kiểm tra xem có hoán vị nào của N bằng bất kỳ lũy thừa nào của K trong Python hay không

Giả sử, chúng ta có hai số nguyên dương n và m, sao cho 2 ≤ n ≤ 1018 và 2 ≤ m ≤ n. Mục tiêu của chúng ta là tìm xem có bất kỳ hoán vị nào gồm tất cả các chữ số của số n; sao cho nó bằng một số lũy thừa của m. Nếu có một hoán vị, chúng ta nói rằng tồn tại một hoán vị gồm tất cả các chữ số của n bằng lũy ​​thừa của m, nếu không, chúng ta phát biểu câu lệnh trước là sai.

Ví dụ, chúng ta được cho n =7182 và m =12. Vì 1728 là một hoán vị tất cả các chữ số của 7182 và 1728 =12 ^ 3, chúng ta phát biểu rằng một hoán vị tất cả các chữ số của n bằng lũy ​​thừa của m .

Vì vậy, nếu đầu vào là n =7182, m =12; thì đầu ra sẽ là "Một hoán vị tất cả các chữ số của n bằng lũy ​​thừa của m".

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm check_power (). Điều này sẽ mất n, m
    • temp_arr_1:=một danh sách mới
    • temp_arr_2:=một danh sách mới
    • while n> 0, do
      • chèn (n mod 10) vào cuối temp_arr_1
      • n:=giá trị sàn của n / 10
    • while m> 0, do
      • chèn (m mod 10) vào cuối temp_arr_2
      • m:=giá trị sàn của m / 10
    • nếu một tập hợp mới từ temp_arr_1 giống với một tập hợp mới từ temp_arr_2, thì
      • trả về True
    • trả về Sai
  • Từ phương thức chính, hãy làm như sau -
  • power_array:=một danh sách mới có kích thước 100 được khởi tạo bằng các chữ số 0.
  • max_range:=10 ^ 18
  • power_array [0]:=m
  • i:=1
  • while (power_array [i - 1] * m)
  • power_array [i]:=power_array [i - 1] * m
  • i:=i + 1
  • đối với j trong phạm vi 0 đến i, thực hiện
    • nếu check_power (n, power_array [j]) là True, thì
      • return "Một hoán vị tất cả các chữ số của n bằng lũy ​​thừa của m"
  • return "Không có hoán vị chữ số nào của n bằng lũy ​​thừa của m"
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    def check_power(n, m):
       temp_arr_1 = []
       temp_arr_2 = []
       while (n > 0) :
          temp_arr_1.append(n % 10)
          n //= 10
       while (m > 0) :
          temp_arr_2.append(m % 10)
          m //= 10
       if (set(temp_arr_1) == set(temp_arr_2)):
          return True
       return False
    def solve(n, m):
       power_array = [0] * 100
       max_range = pow(10, 18)
       power_array[0] = m
       i = 1
       while (power_array[i - 1] * m < max_range) :
          power_array[i] = power_array[i - 1] * m
          i += 1
       for j in range(i):
          if (check_power(n, power_array[j])) :
             return "An all digit-permutation of n is equal to a power of m"
       return "No all digit-permutation of n is equal to a power of m"
    n, m = 7182, 12
    print(solve(n, m))

    Đầu vào

    7182, 12

    Đầu ra

    An all digit-permutation of n is equal to a power of m