ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের পরীক্ষা করতে হবে n একটি আদি মৌলিক কি না। একটি সংখ্যাকে প্রাইমোরিয়াল প্রাইম বলা হয় যখন এটি pN# + 1 বা pN# – 1 ফর্মের একটি মৌলিক সংখ্যা হয়, যেখানে pN# pN এর আদিম নির্দেশ করে যেমন প্রথম N মৌলিক সংখ্যার গুণফল।
সুতরাং, যদি ইনপুট 29 এর মত হয়, তাহলে আউটপুটটি True হবে কারণ 29 হল pN - 1 ফর্মের প্রাইমোরিয়াল প্রাইম যদি N=3, Primorial হল 2*3*5 =30 এবং 30-1 =29।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- MAX :=100000
- prime :=MAX আকারের একটি তালিকা এবং True দিয়ে পূরণ করুন
- arr :=একটি নতুন তালিকা
- একটি ফাংশন সংজ্ঞায়িত করুন SieveOfEratosthenes()। এটি লাগবে
- পরিসীমা 2 থেকে int((MAX) এর বর্গমূল) + 1 এর মধ্যে pri এর জন্য, do
- যদি prime[pri] True এর মত হয়, তাহলে
- পরিসীমা pri * 2 থেকে MAX পর্যন্ত, প্রতিটি ধাপে pri দ্বারা আপডেট করুন, করুন
- প্রাইম[i] :=মিথ্যা
- পরিসীমা pri * 2 থেকে MAX পর্যন্ত, প্রতিটি ধাপে pri দ্বারা আপডেট করুন, করুন
- যদি prime[pri] True এর মত হয়, তাহলে
- পরিসীমা 2 থেকে MAX-এর জন্য, করুন
- যদি prime[pri] অ-শূন্য হয়, তাহলে
- arr-এর শেষে pri ঢোকান
- যদি prime[pri] অ-শূন্য হয়, তাহলে
- প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
- যদি prime[n] শূন্য হয়, তাহলে
- মিথ্যে ফেরত দিন
- পণ্য :=1, i :=0
- যখন পণ্য
- পণ্য :=পণ্য * arr[i]
- যদি পণ্য + 1 n এর মত হয় বা পণ্য - 1 n এর মত হয়, তাহলে
- সত্য ফেরান
- i :=i + 1
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from math import sqrt MAX = 100000 prime = [True] * MAX arr = [] def SieveOfEratosthenes() : for pri in range(2, int(sqrt(MAX)) + 1) : if prime[pri] == True : for i in range(pri * 2 , MAX, pri) : prime[i] = False for pri in range(2, MAX) : if prime[pri] : arr.append(pri) def check_primorial_prime(n) : if not prime[n] : return False product, i = 1, 0 while product < n : product *= arr[i] if product + 1 == n or product - 1 == n : return True i += 1 return False SieveOfEratosthenes() n = 29 print(check_primorial_prime(n))
ইনপুট
29
আউটপুট
True