কম্পিউটার

পাইথনে একটি সংখ্যা একটি ট্রোজান নম্বর কিনা তা পরীক্ষা করুন


ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের পরীক্ষা করতে হবে n একটি ট্রোজান নম্বর কিনা। আমরা জানি যে ট্রোজান সংখ্যা হল এমন একটি সংখ্যা যা একটি নিখুঁত শক্তি ছাড়াই একটি শক্তিশালী সংখ্যা। একটি সংখ্যা n একটি শক্তিশালী সংখ্যা যখন n এর প্রতিটি মৌলিক ভাজক বা ফ্যাক্টর p এর জন্য, p^2ও একটি ভাজক। অন্য কথায়, প্রতিটি প্রাইম ফ্যাক্টর কমপক্ষে দুইবার উপস্থিত হয়। ট্রোজান সংখ্যা শক্তিশালী। কিন্তু বিপরীত সত্য নয়। সুতরাং এর অর্থ হল, সমস্ত শক্তিশালী সংখ্যাই ট্রোজান সংখ্যা নয়:শুধুমাত্র যেগুলিকে a^b হিসাবে উপস্থাপন করা যায় না।

সুতরাং, যদি ইনপুট 72 এর মত হয়, তাহলে আউটপুট হবে True, যেহেতু 72 কে (6*6*2) =(6^2*2) হিসেবে উপস্থাপন করা যেতে পারে। শক্তিশালী সংখ্যা কিন্তু নিখুঁত শক্তি ছাড়া।

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

  • একটি ফাংশন সংজ্ঞায়িত করুন check_perfect_pow()। এটি n
  • লাগবে
  • যদি n 1 এর মত হয়, তাহলে
    • সত্য ফেরান
  • এক্সের জন্য পরিসীমা 2 থেকে পূর্ণসংখ্যার অংশ (n এর বর্গমূল) + 1, করুন
    • y :=2
    • p =x^y
    • যখন p <=n এবং p> 0, do
      • যদি p n এর মত হয়, তাহলে
        • সত্য ফেরান
      • y :=y + 1
      • p =x^y
  • মিথ্যে ফেরত দিন
  • একটি ফাংশন সংজ্ঞায়িত করুন check_strong_num()। এটি n
  • লাগবে
  • গণনা :=সংখ্যার ফ্রিকোয়েন্সি ধরে রাখার জন্য একটি মানচিত্র, প্রাথমিকভাবে সবগুলিই 0
  • যদিও n mod 2 0 এর মতো, do
    • n :=n / 2 (পূর্ণসংখ্যা বিভাগ)
    • গণনা[2] :=গণনা[2] + 1
  • এর জন্য i পরিসীমা 3 থেকে পূর্ণসংখ্যার অংশ (n এর বর্গমূল) + 1, 2 দ্বারা বৃদ্ধি করুন, করুন
    • যদিও n mod i 0 এর মত, do
      • n :=n / i (পূর্ণসংখ্যা বিভাগ)
      • গণনা[i] :=গণনা[i] + 1
  • যদি n> 2 অ-শূন্য হয়, তাহলে
    • গণনা[n] :=গণনা[n] + 1
  • পতাকা :=0
  • প্রতিটি কীর জন্য, আইটেমের মান () গণনার জন্য, করুন
    • যদি মান 1 এর মত হয়, তাহলে
      • পতাকা :=1
      • ব্রেক
  • যদি পতাকা 1 এর মত হয়, তাহলে
    • মিথ্যে ফেরত দিন
  • সত্য ফেরান
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন −
    • যখন check_perfect_pow(n) মিথ্যা হয় এবং check_strong_num(n) সত্য হয়, অন্যথায় মিথ্যা ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from math import sqrt, pow
def check_perfect_pow(n):
   if n == 1:
      return True
   for x in range(2, int(sqrt(n)) + 1):
      y = 2
      p = x**y
      while p <= n and p > 0:
         if p == n:
            return True
         y += 1
         p = x**y
   return False
def check_strong_num(n):
   count = {i:0 for i in range(n)}
   while n % 2 == 0:
      n = n // 2
      count[2] += 1
   for i in range(3,int(sqrt(n)) + 1, 2):
      while n % i == 0:
         n = n // i
         count[i] += 1
   if n > 2:
      count[n] += 1
   flag = 0
   for key,value in count.items():
      if value == 1:
         flag = 1
         break
   if flag == 1:
      return False
   return True
def isTrojan(n):
   return check_perfect_pow(n) == False and check_strong_num(n)
n = 72
print(isTrojan(n))

ইনপুট

72

আউটপুট

True

  1. প্রাইম নম্বর চেক করতে পাইথন প্রোগ্রাম

  2. আর্মস্ট্রং নম্বর চেক করতে পাইথন প্রোগ্রাম

  3. দুটি সংখ্যার বাইনারি উপস্থাপনা অ্যানাগ্রাম কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম।

  4. পাইথনে আর্মস্ট্রং নম্বর কিভাবে তৈরি করবেন?