नीचे दिए गए मेरे कोड में प्राइम की एक सूची बनाकर number
से नीचे सभी प्राइम संख्याएं मिलती हैं और यह देखने के लिए जांच की जाती है कि अगला संभावित प्राइम सूची में किसी भी प्राइम द्वारा समान रूप से विभाजित है या नहीं।क्या आप IENumerable तक पहुंच सकते हैं क्योंकि आप इसे लौट रहे हैं?
मैं yield return
के इंस और आउट सीखने की कोशिश कर रहा हूं। अभी मेरे पास List<int> primes
है जो मैं फ़ंक्शन के अंदर उपयोग करता हूं। लेकिन मैं उसी डेटा को yield return
के माध्यम से वापस कर रहा हूं। तो मेरा सवाल
क्या मैं इसे बनाने के रूप में फ़ंक्शन के अंदर से IENumerable < int> तक पहुंच सकता हूं? तो मैं सूची < int> primes पूरी तरह से हटा सकते हैं।
/// <summary>
/// Finds all primes below <paramref name="number"/>
/// </summary>
/// <param name="number">The number to stop at</param>
/// <returns>All primes below <paramref name="number"/></returns>
private static IEnumerable<long> PrimeNumbers(long number)
{
yield return 2;
List<long> primes = new List<long>(2);
for(long num = 3; num < number; num += 2)
{
//if any prime lower then num divides evenly into num, it isn't a prime
//what I'm doing now
if(!primes.TakeWhile(x => x < num).Any(x => num % x == 0))
{
primes.Add(num);
yield return num;
}
//made-up syntax for what I'd like to do
if(!this.IEnumerable<long>
.TakeWhile(x => x < num).Any(x => num % x == 0))
{
yield return num;
}
}
}
संक्षिप्त उत्तर: नहीं। लंबा उत्तर: एक निश्चित संख्या तक प्राइम प्राप्त करने के बेहतर तरीके हैं। सुंदरम की छलनी देखें: http://en.wikipedia.org/wiki/Sieve_of_Sundaram – SimpleVar
आप इरेटोस्टेनेस की चलनी के लिए जाकर भी सुधार कर सकते हैं: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes और यहां तक कि और भी जाकर एटकिन की चलनी: http://en.wikipedia.org/wiki/Sieve_of_Atkin जो मुझे लगता है कि आज सबसे तेज़ तरीकों में से एक है जिसे प्रमुख संख्याएं उत्पन्न करने के लिए जाना जाता है (यदि सबसे तेज़ नहीं है) और विकी में छद्म कोड भी आपको प्राप्त करने में मदद करता है शुरू कर दिया है। – SimpleVar
@YoryeNathan मैंने उन चाकू को विकिपीडिया पर देखा और यदि मैं इस कोड को कहीं भी महत्वपूर्ण रखने जा रहा था तो शायद मैं उनका उपयोग करूंगा। यह कोड 'उपज रिटर्न' मानसिकता में सोचने के तरीके को प्रशिक्षित करने में मदद करने के लिए और अधिक था। –