क्या कोई भी prime-counting function कार्यान्वयन के कम्प्यूटेशनल रूप से व्यवहार्य छद्म कोड प्रदान कर सकता है? मैंने शुरुआत में Hardy-Wright algorithm कोडिंग करने का प्रयास किया, लेकिन इसके फैक्टोरियल ने दुखी अतिप्रवाह उत्पन्न करना शुरू किया, और कई अन्य समान समस्याएं उत्पन्न करने के लिए बाध्य दिखाई देते हैं। मैंने व्यावहारिक समाधानों के लिए Google को खराब कर दिया है, लेकिन, सबसे अच्छा, बहुत ही गूढ़ गणित मिला है जिसे मैंने पारंपरिक कार्यक्रमों में कभी भी लागू नहीं किया है।प्राइम गिनती फ़ंक्शन का व्यवहार्य कार्यान्वयन
उत्तर
प्राइम-गिनती फ़ंक्शन पीआई (एक्स) x से अधिक नहीं होने वाले प्राइम्स की संख्या की गणना करता है, और सदियों से गणितज्ञों को आकर्षित करता है। अठारहवीं शताब्दी की शुरुआत में, एड्रियान-मैरी लीजेंड्रे ने एक सहायक फंक्शन फाई (एक्स, ए) का उपयोग करके एक फॉर्मूला दिया जो कि उन संख्याओं की गणना करता है जो पहले से अधिक प्राइम के साथ छेड़छाड़ नहीं करते हैं; उदाहरण के लिए, संख्या 1, 7, 11, 13, 17, 1 9, 23, 2 9, 31, 37, 41, 43, 47, 4 9 के लिए फाई (50,3) = 14. फाई फ़ंक्शन की गणना phi के रूप में की जा सकती है (एक्स, ए) = फाई (एक्स, ए -1) - फाई (एक्स/पी (ए), ए -1), जहां फाई (एक्स, 1) एक्स और पी (ए) से अधिक नहीं है अजीब पूर्णांक की संख्या है ए-वें प्राइम नंबर है (पी (1) = 2 से गिनती)।
function phi(x, a)
if (phi(x, a) is in cache)
return phi(x, a) from cache
if (a == 1)
return (x + 1) // 2
t := phi(x, a-1) - phi(x // p[a], a-1)
insert phi(x, a) = t in cache
return t
एक सरणी पी भंडार छोटे एक के लिए एक-वें प्रधानमंत्री, sieving द्वारा गणना की। कैश महत्वपूर्ण है; इसके बिना, रन टाइम घातीय होगा। दिए गए फाई, लीजेंड्रे का प्राइम-गिनती फॉर्मूला पीआई (एक्स) = फाई (एक्स, ए) + ए -1, जहां एक = पीआई (मंजिल (वर्ग (एक्स))) है। लीजेंड्रे ने पीआई (10^6) की गणना करने के लिए अपने फॉर्मूला का इस्तेमाल किया, लेकिन उन्होंने 78498 के सही उत्तर के बजाय 78526 की सूचना दी, जो गलत है, हालांकि, एक जटिल मैन्युअल गणना के लिए आश्चर्यजनक रूप से बंद था।
1950 के दशक में, डेरिक एच लेह्मर गिनती अभाज्य संख्या के लिए एक बेहतर एल्गोरिथ्म दिया:
function pi(x)
if (x < limit) return count(primes(x))
a := pi(root(x, 4)) # fourth root of x
b := pi(root(x, 2)) # square root of x
c := pi(root(x, 3)) # cube root of x
sum := phi(x,a) + (b+a-2) * (b-a+1)/2
for i from a+1 to b
w := n/p[i]
lim := pi(sqrt(w))
sum := sum - pi(w)
if (i <= c)
for j from i to lim
sum := sum - pi(w/p[j]) + j - 1
return sum
उदाहरण के लिए, अनुकरणीय (10^12) = 37607912018. यहां तक कि इन एल्गोरिदम के साथ, और उनके आधुनिक विविधताएँ और बहुत तेजी से कंप्यूटर, यह पीआई के बड़े मूल्यों की गणना करने के लिए बेहद थकाऊ रहता है; इस लेखन में, सबसे बड़ा ज्ञात मूल्य पीआई (10^24) = 18435599767349200867866 है।
एन-वें प्राइम की गणना करने के लिए इस एल्गोरिदम का उपयोग करने के लिए, प्राइम नंबर प्रमेय के लिए एक अनुशासन एन-वें प्राइम पी (एन) एन> 5 के लिए एन लॉग एन और एन (लॉग एन + लॉग लॉग एन) के बीच, इसलिए सीमाओं पर पीआई की गणना करें और एन-वें प्राइम को निर्धारित करने के लिए बायसेक्शन का उपयोग करें, सीमाएं बंद होने पर सिलाई करने के लिए स्विचिंग करें।
मैं my blog पर कई प्रविष्टियों में प्रमुख संख्याओं पर चर्चा करता हूं।
पहले कोड स्निपेट से यह बताया गया है कि phi (x, a) = t, लेकिन यहां आपने phi (x, a-1) = t संग्रहीत किया है (यदि बाद वाला सत्य था, तो इसके लिए एक बहुत तेज़ एल्गोरिदम होगा)। मैं इसे स्वयं संपादित कर दूंगा, लेकिन हमारे पास संपादन का बेवकूफ प्रतिबंध 6 वर्णों से अधिक होना चाहिए। –
@StrategyTinker: सुधार के लिए धन्यवाद। फिक्स्ड। – user448810
हाल ही में, पीआई (10^25) और पीआई (10^26) की गणना की गई है। [पेज 40 यहां देखें] (http://dalspace.library.dal.ca/handle/10222/60524)। – qwr
विकिपीडिया भी मदद कर सकता है। prime counting पर आलेख में कुछ पॉइंटर्स हैं। स्टार्टर्स के लिए मैं "π (x)" के मूल्यांकन के लिए "एल्गोरिदम" खंड में मेसील द्वारा एल्गोरिदम की अनुशंसा करता हूं, जो कि सरल एल्गोरिदम में से एक है जो सभी प्राइम उत्पन्न नहीं करता है।
मुझे पोमेरेंस और क्रैंडल "Prime numbers a computational perspective" सहायक द्वारा पुस्तक भी मिलती है। इस पुस्तक में प्राइम गिनती विधियों का एक विस्तृत और काफी सुलभ वर्णन है। लेकिन ध्यान रखें कि इसकी प्रकृति का विषय यहां अधिकांश पाठकों के लिए थोड़ा उन्नत है।
- 1. प्राइम का न्यूनतम स्पैनिंग ट्री
- 2. प्राइम का एल्गोरिदम समय जटिलता
- 3. पूरक त्रुटि फ़ंक्शन erfcf का वेक्टरिज़ेबल कार्यान्वयन()
- 4. सी में साइन फ़ंक्शन का कार्यान्वयन
- 5. प्राइम नंबर
- 6. प्राइम संख्या
- 7. सी ++ वर्चुअल फ़ंक्शन कार्यान्वयन?
- 8. फ़ंक्शन कार्यान्वयन इंटरफ़ेस
- 9. प्राइम फैक्टर
- 10. क्या आप प्राइम नंबर
- 11. ओ में प्राइम का एमएसटी एल्गोरिदम (| वी |^2)
- 12. पायथन प्राइम फैक्टरेशन प्रदर्शन
- 13. प्राइम नंबर खोजने के लिए फास्ट एल्गोरिदम?
- 14. समवर्ती प्राइम जनरेटर
- 15. प्राइम नंबर जनरेटर स्पष्टीकरण?
- 16. प्राइम नंबर एल्गोरिदम
- 17. यह प्राइम जनरेटर पायथनिक
- 18. गिनती (*)?
- 19. गिनती का चयन/डुप्लिकेट
- 20. MySQL का चयन गिनती
- 21. वास्तव में बड़ी प्राइम उत्पन्न करना
- 22. विभाजित परीक्षण व्यवहार्य ई-मेलों
- 23. क्या एनएच प्राइम के अनुमानित मूल्य को खोजने का कोई तरीका है?
- 24. सी अंतर्निहित लाइब्रेरी फ़ंक्शन कार्यान्वयन को समझना
- 25. सी ++ फ़ंक्शन कंक्रीट कार्यान्वयन स्वीकार नहीं करता
- 26. लर्निंग एफ # - प्रिंटिंग प्राइम नंबर
- 27. क्लोजर प्राइम नंबर आलसी अनुक्रम
- 28. रनटाइम एक व्यवहार्य समाधान मिश्रण है?
- 29. टाइपक्लास: डिफॉल्ट कार्यान्वयन बनाम अलग फ़ंक्शन
- 30. गिनती
क्षमा करें, यह मैकडॉनल्ड्स नहीं है - आपके पास यहां अनुरोध नहीं हैं। आपके पास प्रश्न हैं सटीक प्रोग्रामिंग मुद्दों के बारे में ... कृपया [एफएक्यू] – ppeterka
पढ़ें यह सच नहीं है कि 'मंजिल (x/j) * j == x - (x% j) '। फिर आपके द्वारा लिंक किया गया सूत्र 'पीआई (एक्स) = (-1) + एसयूएम {जे = 3..एन} (((जे -2)!)% जे) '(?) बन जाता है। अगला मॉड्यूलर गुणा का उपयोग करें (यानी '5!% 7 == (((((2 * 3)% 7) * 4)% 7) * 5)% 7')। –
@ सेवरनकोज़क वे कहते हैं कि यह प्रोग्रामिंग समस्या प्रश्न नहीं है क्योंकि आपके प्रश्न में कोई कोड नहीं है। –