কম্পিউটার

পাইথনে দুটি সেমি-প্রাইমের যোগফল হিসাবে একটি পূর্ণসংখ্যা প্রকাশ করা যায় কিনা তা পরীক্ষা করুন


ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের পরীক্ষা করতে হবে n কে দুটি সেমি-প্রাইমের যোগফল হিসেবে প্রকাশ করা যায় কি না।

আমরা জানি সেমি-প্রাইম একটি সংখ্যা যদি এটি দুটি মৌলিক সংখ্যার গুণফল হিসাবে প্রকাশ করা যায়। প্রথম কয়েকটি সেমি-প্রাইম সংখ্যা হল (1 - 100 পরিসর):4, 6, 9, 10, 14, 15, 21, 22, 25, 26, 33, 34, 35, 38, 39, 46, 49, 51, 55, 57, 58, 62, 65, 69, 74, 77, 82, 85, 86, 87, 91, 93, 94, 95।

সুতরাং, যদি ইনপুটটি n =108 এর মত হয়, তাহলে আউটপুটটি True হবে কারণ এটি 14 এবং 94 এর যোগফল উভয়ই সেমি-প্রাইম।

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

  • MAX :=10000 ধরে নিচ্ছি প্রদত্ত ইনপুটগুলি সেমি-প্রাইমের সমষ্টি যা 1 থেকে 10000 রেঞ্জের মধ্যে রয়েছে
  • সংখ্যা :=একটি নতুন তালিকা
  • s_prime_flags :=MAX আকারের একটি অ্যারে এবং False দিয়ে পূরণ করুন
  • একটি ফাংশন সংজ্ঞায়িত করুন get_semi_primes()। এটি লাগবে
  • আমি রেঞ্জ 2 থেকে MAX - 1 এর জন্য, কর
    • গণনা :=0
    • সংখ্যা :=i
    • j :=2
    • গণনা করার সময় <2 এবং j^2 <=সংখ্যা, কর
      • সংখ্যা j দ্বারা বিভাজ্য, do
        • num :=num / j
        • গণনা :=গণনা + 1
      • j :=j + 1
    • যদি সংখ্যা> 1 হয়, তাহলে
      • গণনা :=গণনা + 1
    • যদি গণনা 2 এর সমান হয়, তাহলে
      • s_prime_flags[i] :=সত্য
  • সংখ্যার শেষে i ঢোকান
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • কল get_semi_primes()
  • i :=0
  • যখন সংখ্যা[i] <=(n / 2) এর ভাগফল, কর
    • যদি s_prime_flags[n - nums[i]] সত্য হয়, তাহলে
      • সত্য ফেরান
    • i :=i + 1
  • মিথ্যে ফেরত দিন

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

উদাহরণ

MAX = 10000
nums = []
s_prime_flags = [False] * MAX
def get_semi_primes():
   for i in range(2, MAX):
      count = 0
      num = i
      j = 2
      while count < 2 and j * j <= num:
         while num % j == 0:
            num /= j
            count += 1
      j += 1
      if num > 1:
         count += 1
      if count == 2:
         s_prime_flags[i] = True
         nums.append(i)
def solve(n):
   get_semi_primes()
   i = 0
   while nums[i] <= n // 2:
      if s_prime_flags[n - nums[i]] == True:
         return True
      i += 1
   return False
n = 108
print(solve(n))

ইনপুট

[4, 2, 3], 11

আউটপুট

True

  1. পাইথনে বেস 10 পূর্ণসংখ্যার পরিপূরক

  2. পাইথনে দুটি পূর্ণসংখ্যার যোগফল

  3. পাইথনে দুই যোগফল

  4. দুটি সংখ্যা (m,n) বন্ধুত্বপূর্ণ বা পাইথন ব্যবহার করছে না কিনা তা কীভাবে পরীক্ষা করবেন?