- •Модуль 1. Алгоритми і абстрактні структури даних Лекція 2. Способи запису алгоритмів
- •2.1. Способи запису алгоритмів
- •2.2. Базові конструкції структурного програмування
- •2.3. Прості алгоритми. Обчислення n! і чисел Фібоначчі (нерекурсивні алгоритми)
- •2.3.1. Знаходження факторіала цілого числа
- •2.3.2. Знаходження чисел Фібоначчі
- •2.4. Алгоритм Ератосфена пошуку простих чисел
- •2.5. Алгоритм знаходження найбільшого спільного дільника двох чисел (алгоритм Евкліда).
- •Словесний опис алгоритму пошуку нсд діленням:
- •Словесний опис алгоритму знаходження нсд відніманням
- •2.5. Очислення часу виконання програми
2.4. Алгоритм Ератосфена пошуку простих чисел
До важливих алгоритмів відноситься і алгоритм пошуку простих чисел.
Простим є число, яке ділиться тільки на 1 і на себе.
Алгоритм пошуку простих чисел запропонував древньогрецький математик Ератосфен, і він отримав назву Решето Ератосфена.
Ідея і загальний опис алгоритму.
Є розташована в ряд за збільшенням послідовність цілих чисел. Спочатку в ній викреслюються усі числа кратні 2, окрім її самої, і так до N. Далі із списку, що вийшов, береться число, що йде за двійкою, - трійка, викреслюються усі кратні 3 числа, окрім її самої. У такому вигляді алгоритм триває для частини послідовності, що залишилася, і у результаті отримаємо усі прості числа у вказаному діапазоні.
|
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
У таблиці наведені усі цілі числа від 2 до 100. Червоним помічені ті, які були видалені в процесі виконання алгоритму Решето Ератосфену.
Тепер розглянемо алгоритм детальніше, розбивши його на декілька частин.
Словесний опис алгоритму.
Отже, для пошуку простих чисел за алгоритмом Решето Ератосфена треба:
Організувати список з чисел від 2 до N, а також логічний масив розмірністю N;
У вільну змінну R записати число 2;
Виключити усі числа кратні R, починаючи з R*2;
Записати в R наступне за R не закреслене число;
Повторювати дії, описані в двох попередніх кроках.
Цей самий алгоритм можна реалізувати на інших мовах програмування.
Реалізація алгоритму на мові C#
class Program
{
//Знаходження простих чисел. Алгоритм "Решето Ератосфена"
//Запишемо підряд усі числа від 2 до N.
/Далі викреслимо з цього списку усі числа кратні 2,
// виключаючи саму двійку, потім викреслимо усі числа кратні 3,
//виключаючи само число 3, число 4 вже викреслено, викреслюємо числа кратні 5 і так далі
/Продовжуємо цей процес, поки квадрат чергового числа не перевищить N.
static void Main(string[] args)
{
bool[] table = new bool[100];
int i, j;
// Відмічаємо усі числа як прості
for (i = 0; i < table.Length; i++)
table[i] = true;
// Викреслюємо зайве
for (i = 2; i * i < table.Length; i++)
if (table[i])
for (j = 2 * i; j < table.Length; j += i)
table[j] = false;
// Виводимо знайдене
for (i = 2; i < table.Length; i++)
{
if (table[i])
Console.WriteLine(i);
}
Console.ReadKey();
}
}