ধরুন আমাদের একটি প্রদত্ত পূর্ণসংখ্যা N আছে; আমাদেরকে N-এর চেয়ে কম সমস্ত ট্রাঙ্কেটেবল প্রাইমগুলির যোগফল খুঁজে বের করতে হবে। যেমন আমরা জানি ট্রাঙ্কেটেবল প্রাইম হল একটি সংখ্যা যা বাম-কাঁটা যোগ্য প্রাইম (যদি অগ্রণী "বাম" ডিজিটটি পরপর মুছে ফেলা হয়, তাহলে সমস্ত ফলিত সংখ্যাকে প্রাইম হিসাবে গণ্য করা হবে) সেইসাথে রাইট-ট্রাঙ্কেটেবল প্রাইম (যদি শেষ "ডান" ডিজিটটি পরপর মুছে ফেলা হয়, তাহলে সমস্ত ফলাফল সংখ্যাকে প্রাইম হিসাবে গণ্য করা হবে)। ট্রাঙ্কেটেবল প্রাইমের একটি উদাহরণ হল 9137 কারণ এটি লেফটট্রাঙ্কটেবল প্রাইম কারণ 9137, 137, 37 এবং 7 হল প্রাইম। তাই 9137 হল একটি ছোট করা যায় এমন প্রাইম৷
সুতরাং, যদি ইনপুটটি N =55 এর মত হয়, তাহলে আউটপুট 130 হবে (2 + 3 + 5 + 7 + 23 + 37 + 53) =
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
N :=1000005
-
prime :=N আকারের একটি তালিকা এবং True দিয়ে পূরণ করুন
-
একটি ফাংশন চালনী() সংজ্ঞায়িত করুন। এটি লাগবে
-
prime[1] :=False, prime[0] :=False
-
2 থেকে N রেঞ্জের জন্য, করুন
-
যদি prime[i] True এর মত হয়, তাহলে
-
j এর জন্য i * 2 থেকে N পরিসরে, i, do
দ্বারা প্রতিটি ধাপে আপডেট করুন-
prime[j] :=মিথ্যা
-
-
-
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
যোগফল :=0
-
2 থেকে n রেঞ্জের জন্য, করুন
-
বর্তমান :=i
-
f :=সত্য
-
-
যখন কারেন্ট অ-শূন্য হয়, তখন করুন
-
যদি প্রাইম[কারেন্ট] মিথ্যা হয়, তাহলে
-
f :=মিথ্যা
-
লুপ থেকে বেরিয়ে আসুন
-
-
বর্তমান :=বর্তমান / 10
-
-
বর্তমান :=i
-
শক্তি :=10
-
যখন (কারেন্ট / পাওয়ার) এর ভাগফল অ-শূন্য, কর
-
যদি prime[বর্তমান মোড পাওয়ার] মিথ্যা হয়, তাহলে
-
f :=মিথ্যা
-
লুপ থেকে বেরিয়ে আসুন
-
-
পাওয়ার :=পাওয়ার * 10
-
-
যদি f সত্য হয়, তাহলে
-
যোগফল :=যোগফল + i
-
-
ফেরত যোগফল
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
N = 1000005 prime = [True for i in range(N)] def sieve(): prime[1] = False prime[0] = False for i in range(2, N): if (prime[i]==True): for j in range(i * 2, N, i): prime[j] = False def get_total_of_trunc_primes(n): sum = 0 for i in range(2, n): current = i f = True while (current): if (prime[current] == False): f = False break current //= 10 current = i power = 10 while (current // power): if (prime[current % power] == False): f = False break power *= 10 if f: sum += i return sum n = 55 sieve() print(get_total_of_trunc_primes(n))
ইনপুট
55
আউটপুট
130