Найти простые числа используя решето Эратосфена и однонаправленный список - C#

Узнай цену своей работы

Формулировка задачи:

Дано натуральное число n (n≥2). Найти все меньшие n простые числа, используя решето Эратосфена. Решетом Эратосфена называют следующий способ. Выпишем подряд все целые числа от 2 до n. Первое простое число 2. Подчеркнем его, а все большие числа, кратные 2, зачеркнем. Первое из оставшихся чисел 3. Подчеркнем его как простое, а все большие числа, кратные, 3, зачеркнем. Первое число из оставшихся теперь 5, так как 4 уже зачеркнуто. Подчеркнем его как простое, а все большие числа, кратные 5 зачеркнем и т.д.:2, 3, 4,5, 6,7, 8, 9, 10, ... Исходную последовательность чисел организовать в виде однонаправленного списка. Удаление производить внутри этого списка, не используя дополнительные списки. Администрация и модераторы не удаляйте эту Тема пожалуйста, да на нее ответили, но не правильно! Помогите пожалуйста написать программу не на Basic, а на C# ибо показывал код преподу она сказала что он на Basic, а надо было на c#. Заранее спасибо

Решение задачи: «Найти простые числа используя решето Эратосфена и однонаправленный список»

textual
Листинг программы
  1. class Node<T>
  2. {
  3.     public Node<T> Next;
  4.     public T Value;
  5. }
  6.  
  7. class SingleLinkedList<T>: IEnumerable<T>
  8. {
  9.     public class Iterator: IEnumerator<T>
  10.     {
  11.         private Node<T> _node;
  12.         private SingleLinkedList<T> _list;
  13.        
  14.         public Iterator(SingleLinkedList<T> list)
  15.         {
  16.             _list = list;
  17.         }
  18.        
  19.         public bool MoveNext()
  20.         {
  21.             if (_node == null)
  22.             {
  23.                 _node = _list.Head;
  24.             }
  25.             else
  26.             {
  27.                 _node = _node.Next;
  28.             }
  29.            
  30.             return _node != null;
  31.         }
  32.        
  33.         public void Reset()
  34.         {
  35.             _node = null;
  36.         }
  37.  
  38.         public void Dispose() { _node = null; }
  39.        
  40.         public T Current => _node.Value;
  41.        
  42.         object IEnumerator.Current => Current;
  43.     }
  44.    
  45.     public IEnumerator<T> GetEnumerator()
  46.     {
  47.         return new Iterator(this);
  48.     }
  49.    
  50.     IEnumerator IEnumerable.GetEnumerator()
  51.     {
  52.         return GetEnumerator();
  53.     }
  54.    
  55.     private Node<T> _head;
  56.     private Node<T> _tail;
  57.  
  58.     public Node<T> Head => _head;
  59.  
  60.     public void PushBack(T value)
  61.     {
  62.         var node = new Node<T> { Value = value };
  63.        
  64.         if (_tail == null)
  65.         {
  66.             _head = _tail = node;
  67.             return;
  68.         }
  69.  
  70.         _tail.Next = new Node<T> { Value = value };
  71.         _tail = _tail.Next;
  72.     }
  73.    
  74.     public void Remove(Node<T> node)
  75.     {
  76.         if (node == _head)
  77.         {
  78.             if (node == _tail)
  79.             {
  80.                 _head = _tail = null;
  81.             }
  82.             else
  83.             {
  84.                 _head = _head.Next;
  85.             }
  86.             return;
  87.         }
  88.  
  89.         var curr = _head;
  90.         while (curr.Next != node)
  91.         {
  92.             curr = curr.Next;
  93.         }
  94.  
  95.         curr.Next = node.Next;
  96.         if (_tail == node)
  97.         {
  98.             _tail = curr;
  99.         }
  100.     }
  101. }
  102.  
  103. void ApplyEratosthenesSieveIteration(SingleLinkedList<int> list, Node<int> start)
  104. {
  105.     var curr = start;
  106.     var prime = start.Value;
  107.    
  108.     while (curr != null)
  109.     {
  110.         var next = curr.Next;
  111.         if (curr.Value > prime && curr.Value % prime == 0)
  112.         {
  113.             list.Remove(curr);
  114.         }
  115.         curr = next;
  116.     }
  117. }
  118.  
  119. void ApplyEratosthenesSieve(SingleLinkedList<int> list)
  120. {
  121.     var start = list.Head;
  122.     while (start != null)
  123.     {
  124.         ApplyEratosthenesSieveIteration(list, start);
  125.         start = start.Next;
  126.     }
  127. }
  128.  
  129. void Main()
  130. {
  131.     var list = new SingleLinkedList<int>();
  132.     for (int i = 2; i < 100; i++)
  133.     {
  134.         list.PushBack(i);
  135.     }
  136.    
  137.     ApplyEratosthenesSieve(list);
  138.  
  139.     foreach (var e in list)
  140.     {
  141.         Console.WriteLine(e);
  142.     }
  143. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы