কম্পিউটার

Python-এ N-এর কোনো স্থানান্তর K-এর শক্তির সমান কিনা তা পরীক্ষা করুন


ধরুন, আমাদের দুটি ধনাত্মক পূর্ণসংখ্যা n এবং m আছে, যেমন 2 ≤ n ≤ 1018 এবং 2 ≤ m ≤ n। আমাদের লক্ষ্য হল n সংখ্যার কোনো অল-ডিজিট-পারমুটেশন আছে কিনা তা খুঁজে বের করা; যাতে এটি m এর কিছু শক্তির সমান হয়। যদি একটি থাকে, আমরা বলি যে n-এর একটি অল-ডিজিট-পারমুটেশন আছে যা m-এর ঘাতের সমান, অন্যথায় আমরা পূর্ববর্তী বিবৃতিটিকে মিথ্যা বলে বর্ণনা করি।

উদাহরণস্বরূপ, আমাদের দেওয়া হয়েছে n =7182 এবং m =12। যেহেতু 1728 হল 7182 এবং 1728 =12^3 এর একটি সর্ব-সংখ্যা-ক্রমানুবর্তন, আমরা বলি যে n-এর একটি অল-ডিজিট-পারমুটেশন m এর ঘাতের সমান। .

সুতরাং, যদি ইনপুট হয় n=7182, m =12; তাহলে আউটপুট হবে "n-এর সমস্ত অঙ্ক-ক্রমানুবর্তন m-এর শক্তির সমান"।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সংজ্ঞায়িত করুন check_power()। এটি n, m
      লাগবে
    • temp_arr_1 :=একটি নতুন তালিকা
    • temp_arr_2 :=একটি নতুন তালিকা
    • যখন n> 0, do
      • temp_arr_1 এর শেষে (n mod 10) সন্নিবেশ করুন
      • n :=n / 10 এর ফ্লোর মান
    • যখন m> 0, do
      • temp_arr_2 এর শেষে সন্নিবেশ করুন (m mod 10)
      • m :=m / 10 এর ফ্লোর মান
    • যদি temp_arr_1 থেকে একটি নতুন সেট temp_arr_2 এর একটি নতুন সেটের মতো হয়, তাহলে
      • সত্য ফেরান
    • মিথ্যে ফেরত দিন
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • পাওয়ার_অ্যারে :=0s দিয়ে শুরু করা 100 আকারের একটি নতুন তালিকা।
  • সর্বোচ্চ_পরিসীমা :=10^18
  • পাওয়ার_অ্যারে[0] :=m
  • i :=1
  • যখন (power_array[i - 1] * m)
  • power_array[i] :=power_array[i - 1] * m
  • i :=i + 1
0 থেকে i রেঞ্জে j-এর জন্য
  • করুন
    • যদি check_power(n, power_array[j]) True হয়, তাহলে
      • প্রত্যাবর্তন "n-এর সমস্ত অঙ্ক-ক্রমানুবর্তন m এর ঘাতের সমান"
  • রিটার্ন "n-এর সব ডিজিট-পারমুটেশন m-এর পাওয়ার সমান নয়"
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    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))

    ইনপুট

    7182, 12

    আউটপুট

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

    1. পাইথন - অভিধান খালি কিনা তা পরীক্ষা করুন

    2. Python - একটি ভেরিয়েবল স্ট্রিং কিনা তা পরীক্ষা করুন

    3. পাইথনে পরবর্তী পারমুটেশন

    4. পাইথনে পাওয়ার অফ থ্রি