पहचान
कुछ बेस बी में कुछ सकारात्मक पूर्णांक एन लेने की प्रक्रिया पर विचार करें और प्रत्येक अंक को अंक के आधार में अपने प्रतिनिधित्व के साथ दाईं ओर प्रतिस्थापित करें।
- यदि दाईं ओर अंक 0 है, तो आधार b का उपयोग करें ।
- यदि दाईं ओर अंक 1 है, तो 0 के रूप में टैली के निशान के साथ यूरीरी का उपयोग करें ।
- यदि दाईं ओर कोई अंक नहीं है (यानी आप लोगों के स्थान पर हैं), तो सबसे महत्वपूर्ण अंक के चारों ओर लूप।
एक उदाहरण के रूप में n = 160 और b = 10. चलिए प्रक्रिया इस तरह दिखती है:
The first digit is 1, the digit to the right is 6, 1 in base 6 is 1.
The next digit is 6, the digit to the right is 0, 0 is not a base so use b, 6 in base b is 6.
The last digit is 0, the digit to the right (looping around) is 1, 0 in base 1 is the empty string (but that's ok).
Concatenating '1', '6', and '' together gives 16, which is read in the original base b = 10.
ठीक उसी प्रक्रिया, लेकिन दाएं के बजाय बाएं चलना भी किया जा सकता है:
The first digit is 1, the digit to the left (looping around) is 0, 0 is not a base so use b, 1 in base b is 1.
The next digit is 6, the digit to the left is 1, 6 in base 1 is 000000.
The last digit is 0, the digit to the left is 6, 0 in base 6 is 0.
Concatenating '1', '000000', and '0' together gives 10000000, which is read in the original base b = 10.
इस प्रकार, हमने 160 ( b = 10 के लिए) से संबंधित दो संख्याएँ बनाई हैं : 16 और 10000000।
हम n को एक चालाक संख्या के रूप में परिभाषित करेंगे यदि यह समान रूप से इस प्रक्रिया में उत्पन्न दो संख्याओं में से कम से कम एक या अधिक भागों में विभाजित हो
उदाहरण में n चालाक है क्योंकि 160, 10000000 को 62500 बार विभाजित करता है।
203 चालाक नहीं है क्योंकि परिणामी संख्या 2011 और 203 ही है, जो 203 समान रूप से 2 या अधिक बार फिट नहीं हो सकती है।
चुनौती
(शेष समस्या के लिए हम केवल b = 10. पर विचार करेंगे )
चुनौती के लिए एक प्रोग्राम लिखना है जो सबसे अधिक चालाक संख्या पाता है जो कि प्रधान भी है।
पहले 7 चालाक प्राइम (और अब तक मैंने जो भी पाया है) हैं:
2
5
3449
6287
7589
9397
93557 <-- highest so far (I've searched to 100,000,000+)
मैं आधिकारिक तौर पर निश्चित नहीं हूं कि और अधिक मौजूद हैं, लेकिन मुझे उम्मीद है कि वे ऐसा करेंगे। यदि आप यह साबित कर सकते हैं कि बहुत से हैं (या नहीं) तो बहुत से मैं आपको +200 बाउंटी प्रतिनिधि दूंगा।
विजेता वह व्यक्ति होगा जो उच्चतम चालाक प्रधानमंत्री प्रदान कर सकता है, बशर्ते कि यह स्पष्ट है कि वे खोज में सक्रिय रहे हैं और जानबूझकर दूसरों से महिमा नहीं ले रहे हैं।
नियम
- आप अपने इच्छित किसी भी प्राइम फाइंडिंग टूल का उपयोग कर सकते हैं।
- आप संभावित प्रधानमंत्री परीक्षकों का उपयोग कर सकते हैं।
- आप अन्य लोगों के कोड का पुन: उपयोग कर सकते हैं निरुपण के साथ । यह एक सांप्रदायिक प्रयास है। कटहल की रणनीति बर्दाश्त नहीं की जाएगी।
- आपके कार्यक्रम को प्रमुखता से सक्रिय रूप से खोजना होगा। आप अपनी खोज उच्चतम ज्ञात चालाक प्राइम में शुरू कर सकते हैं।
- आपका कार्यक्रम अमेज़ॅन EC2 t2.medium इंस्टेंस के 4 घंटे के भीतर सभी ज्ञात चालाक प्राइमों की गणना करने में सक्षम होना चाहिए (या तो एक बार में चार या चार घंटे के लिए या बीच में कुछ)। मैं वास्तव में उन पर इसका परीक्षण नहीं करूंगा और आपको निश्चित रूप से इसकी आवश्यकता नहीं है। यह सिर्फ एक बेंचमार्क है।
यहाँ मेरा पायथन 3 कोड है जिसका उपयोग मैंने ऊपर दी गई तालिका को बनाने के लिए किया था: (एक या दो सेकंड में चलता है)
import pyprimes
def toBase(base, digit):
a = [
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000' ],
['0', '1', '10', '11', '100', '101', '110', '111', '1000', '1001'],
['0', '1', '2', '10', '11', '12', '20', '21', '22', '100'],
['0', '1', '2', '3', '10', '11', '12', '13', '20', '21'],
['0', '1', '2', '3', '4', '10', '11', '12', '13', '14'],
['0', '1', '2', '3', '4', '5', '10', '11', '12', '13'],
['0', '1', '2', '3', '4', '5', '6', '10', '11', '12'],
['0', '1', '2', '3', '4', '5', '6', '7', '10', '11'],
['0', '1', '2', '3', '4', '5', '6', '7', '8', '10']
]
return a[base][digit]
def getCrafty(start=1, stop=100000):
for p in pyprimes.primes_above(start):
s = str(p)
left = right = ''
for i in range(len(s)):
digit = int(s[i])
left += toBase(int(s[i - 1]), digit)
right += toBase(int(s[0 if i + 1 == len(s) else i + 1]), digit)
left = int(left)
right = int(right)
if (left % p == 0 and left // p >= 2) or (right % p == 0 and right // p >= 2):
print(p, left, right)
if p >= stop:
break
print('DONE')
getCrafty()