मुझे वास्तव में मेरे प्रश्न का उत्तर है लेकिन यह समांतर नहीं है इसलिए मुझे एल्गोरिदम सुधारने के तरीकों में रूचि है। वैसे भी यह कुछ लोगों के लिए उपयोगी हो सकता है।सी # में प्राइम की गणना करने का सबसे तेज़ तरीका?
int Until = 20000000;
BitArray PrimeBits = new BitArray(Until, true);
/*
* Sieve of Eratosthenes
* PrimeBits is a simple BitArray where all bit is an integer
* and we mark composite numbers as false
*/
PrimeBits.Set(0, false); // You don't actually need this, just
PrimeBits.Set(1, false); // remindig you that 2 is the smallest prime
for (int P = 2; P < (int)Math.Sqrt(Until) + 1; P++)
if (PrimeBits.Get(P))
// These are going to be the multiples of P if it is a prime
for (int PMultiply = P * 2; PMultiply < Until; PMultiply += P)
PrimeBits.Set(PMultiply, false);
// We use this to store the actual prime numbers
List<int> Primes = new List<int>();
for (int i = 2; i < Until; i++)
if (PrimeBits.Get(i))
Primes.Add(i);
हो सकता है कि मैं कई BitArray
और इस्तेमाल कर सकते हैं उन्हें BitArray.And() एक साथ?
क्या यह अद्यतन कोड है? – Crash893
सी # में मल्टीप्रोसेसिंग का उपयोग करने के बारे में मुझे सबसे तेज़ तरीका यह कोड है जिसे मैंने किसी अन्य प्रश्न के उत्तर के रूप में सबमिट किया है: http://stackoverflow.com/a/18885065/549617। यह लगभग 0.32 सेकेंड में प्राइम की कुल संख्या एक अरब तक मिलती है, 32-बिट संख्या में प्राइम की संख्या लगभग 1.2 9 सेकेंड में होती है, और लगभग 3 सेकंड में दस अरब तक की कीमत ** ** ** नहीं इंटेल i7-2700K पर प्रसार (3.5 गीगाहर्ट्ज जिसमें चार कोर/आठ धागे शामिल हैं जिनमें हाइपर थ्रेडिंग शामिल है)। इसके परिणाम तेजी से देने के लिए, किसी को कोड कोड का उपयोग https://code.google.com/p/primesieve/ में करना होगा। – GordonBGood
मैंने ऊपर दिए गए समाधान की कोशिश की और मुझे अपवाद मिला: 'अंकगणितीय ऑपरेशन के परिणामस्वरूप ओवरफ्लो' हुआ। सूची सूची होना चाहिए। –
Devid