सबसे पहले - मैंने इस मंच में बहुत कुछ देखा है और मुझे कुछ कुछ तेज़ नहीं मिला है। मैं एक ऐसा फ़ंक्शन बनाने का प्रयास करता हूं जो मुझे निर्दिष्ट सीमा में प्रमुख संख्या देता है। उदाहरण के लिए मैंने एरैटोस्टेनेस की चलनी का उपयोग करके यह फ़ंक्शन (सी # में) किया था। मैं भी एटकिन की चलनी की कोशिश की लेकिन एरेटोस्थेनेज एक तेजी से चलाता है (मेरे कार्यान्वयन में):प्राइम नंबर खोजने के लिए फास्ट एल्गोरिदम?
public static void SetPrimesSieve(int Range)
{
Primes = new List<uint>();
Primes.Add(2);
int Half = (Range - 1) >> 1;
BitArray Nums = new BitArray(Half, false);
int Sqrt = (int)Math.Sqrt(Range);
for (int i = 3, j; i <= Sqrt;)
{
for (j = ((i * i) >> 1) - 1; j < Half; j += i)
Nums[j] = true;
do
i += 2;
while (i <= Sqrt && Nums[(i >> 1) - 1]);
}
for (int i = 0; i < Half; ++i)
if (!Nums[i])
Primes.Add((uint)(i << 1) + 3);
}
यह से कोड & एल्गोरिदम मैंने पाया दो बार तेजी के बारे में चलाता है ... वहाँ रूढ़ अंक खोजने के लिए एक तेज़ तरीका होना चाहिए, क्या आप मेरी मदद कर सकते हैं?
इन आप किस कीमत की तलाश कर रहे हैं? बस 0 और अधिकतम int के बीच? सीमा भी कितनी विस्तृत है? – Gleno
चलो अरब/2 – Ohad
जैसे कुछ कहें 10 एम 9 से कम 50 एम प्राइम्स हैं, इसलिए उन्हें प्रीकंप्यूटिंग करने से आपको 200 एमबी टेबल मिल जाएगी। यह वास्तव में चाकू को स्टोर करने के लिए छोटा होगा (10^9 बिट्स 125 एमबी है, और आपको यहां तक कि बिट्स को स्टोर करने की आवश्यकता नहीं है, ताकि आप इसे 64 एमबी के तहत फिट कर सकें)। – Gabe