Mã của tôi dưới đây tìm tất cả các số nguyên tố bên dưới number
bằng cách tạo danh sách số nguyên tố và kiểm tra xem nguyên tố tiềm năng tiếp theo có thể chia đều cho bất kỳ số nguyên tố nào trong danh sách hay không.Bạn có thể truy cập vào IEnumerable khi bạn mang lại lợi nhuận không?
Tôi đang cố gắng tìm hiểu thông tin chi tiết về số yield return
. Ngay bây giờ tôi có một List<int> primes
mà tôi sử dụng bên trong chức năng. Nhưng tôi trả lại cùng một dữ liệu qua yield return
. Vì vậy, câu hỏi của tôi là
Tôi có thể truy cập IEnumerable < int> từ bên trong chức năng như tôi đang tạo không? Vì vậy, tôi có thể xóa toàn bộ danh sách < int.
/// <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;
}
}
}
Câu trả lời ngắn: Không. Câu trả lời dài: Có nhiều cách tốt hơn để lấy số nguyên tố cho đến một số nhất định. Kiểm tra Sàng của Sundaram: http://en.wikipedia.org/wiki/Sieve_of_Sundaram – SimpleVar
Bạn cũng có thể cải thiện bằng cách đi tìm Sàng Eratosthenes: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes và thậm chí nhiều hơn bằng cách đi cho Sieve of Atkin: http://en.wikipedia.org/wiki/Sieve_of_Atkin Tôi nghĩ đây là một trong những cách nhanh nhất hiện nay để tạo ra số nguyên tố (nếu không phải là nhanh nhất) và cũng có mã giả trong wiki để giúp bạn nhận được đã bắt đầu. – SimpleVar
@YoryeNathan Tôi thấy những cái rây trên wikipedia và nếu tôi định giữ mã này ở bất cứ nơi nào quan trọng, tôi có thể sử dụng chúng. Mã này giúp ích nhiều hơn cho việc rèn luyện bản thân mình suy nghĩ như thế nào trong tư duy 'lợi nhuận '. –