C#: Простые числа методом Решета Эратосфена

Недавно писал уже о нахождении простых чисел методом перебора. Метод конечно работает, но у него есть одна проблема — медленный он.Чуть более быстрый метод — это решето Эратосфена.

Описание алгоритма из Википедии:

Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:

  1. Выписать подряд все целые числа от двух до n (2, 3, 4, …, n).
  2. Пусть переменная p изначально равна двум — первому простому числу.
  3. Считая от p шагами по p, зачеркнуть в списке все числа от 2p до n кратные p (то есть числа 2p, 3p, 4p, …)
  4. Найти первое не зачеркнутое число, большее чем p, и присвоить значению переменной p это число.
  5. Повторять шаги 3 и 4 до тех пор, пока p не станет больше, чем n

Continue reading

Pascal, Си/C++, C# Определение совершенного числа

Иногда задают задачи по нахождению совершенного числа.

Как гласит Википедия, Совершенное число это :

натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого числа).

Continue reading