ধরুন আমাদের একটি সংখ্যা 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
- যদি p n এর মত হয়, তাহলে
- মিথ্যে ফেরত দিন
- একটি ফাংশন সংজ্ঞায়িত করুন 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 mod i 0 এর মত, do
- যদি n> 2 অ-শূন্য হয়, তাহলে
- গণনা[n] :=গণনা[n] + 1
- পতাকা :=0
- প্রতিটি কীর জন্য, আইটেমের মান () গণনার জন্য, করুন
- যদি মান 1 এর মত হয়, তাহলে
- পতাকা :=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