मान लीजिए हमारे पास एक दिया गया पूर्णांक N है। हमें N से कम सभी ट्रंकेटेबल अभाज्य संख्याओं का योग ढूंढना है। जैसा कि हम जानते हैं, ट्रंकेटेबल अभाज्य संख्या वह संख्या है जो लेफ्ट-ट्रंकेटेबल अभाज्य (यदि अग्रणी "बायां" अंक क्रमिक रूप से हटाया जाए, तो सभी परिणामी संख्याएं अभाज्य मानी जाती हैं) और राइट-ट्रंकेटेबल अभाज्य (यदि अंतिम "दायां" अंक क्रमिक रूप से हटाया जाए, तो सभी परिणामी संख्याएं अभाज्य मानी जाती हैं) दोनों होती है। ट्रंकेटेबल अभाज्य का एक उदाहरण 9137 है क्योंकि यह लेफ्ट-ट्रंकेटेबल अभाज्य है: 9137, 137, 37 और 7 सभी अभाज्य हैं। इसलिए 9137 एक ट्रंकेटेबल अभाज्य है।
इसलिए, यदि इनपुट N = 55 है, तो आउटपुट 130 होगा क्योंकि (2 + 3 + 5 + 7 + 23 + 37 + 53) = 130।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
N := 1000005prime := [True] * Nsieve()फ़ंक्शन परिभाषित करें:prime[1] := False,prime[0] := Falseiको 2 सेN-1तक के लिए:- यदि
prime[i] == True:jकोi*2सेN-1तकiचरण में:prime[j] := False
- यदि
- मुख्य विधि से:
sum := 0iको 2 सेn-1तक के लिए:current := if := True- जब तक
current != 0:- यदि
prime[current] == False, तोf := False, ब्रेक करें। current := current // 10
- यदि
current := ipower := 10- जब तक
current // power != 0:- यदि
prime[current % power] == False, तोf := False, ब्रेक करें। power := power * 10
- यदि
- यदि
f == True, तोsum := sum + i
sumलौटाएं।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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):
total = 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:
total += i
return total
n = 55
sieve()
print(get_total_of_trunc_primes(n))
इनपुट
55
आउटपुट
130