-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy patheratosthenes.os
55 lines (41 loc) · 1.89 KB
/
eratosthenes.os
1
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
Перем юТест;
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование;
ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ВыполнитьРешетоЭратосфена");
Возврат ВсеТесты;
КонецФункции
Процедура ТестДолжен_ВыполнитьРешетоЭратосфена() Экспорт
Фрагмент = Новый СкомпилированныйФрагмент();
Н = 50000;
Алгоритм = "
|Массив = Новый Массив();
|Массив.Добавить(Ложь);
|Массив.Добавить(Ложь);
|
|Для индекс = 2 По Н Цикл
| Массив.Добавить(Истина);
|КонецЦикла;
|
|времяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
|Для индекс = 2 По Н Цикл
| Если Массив[индекс] Тогда
| квадрат = индекс * индекс;
| Если квадрат <= Н Тогда
| м = квадрат;
| Пока м <= Н Цикл
| Массив[м] = Ложь;
| м = м + индекс;
| КонецЦикла;
| КонецЕсли;
| КонецЕсли;
|КонецЦикла;
|
|времяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах();
|Возврат (времяОкончания - времяНачала)/1000";
Фрагмент.ФрагментКода = Алгоритм;
Фрагмент.Параметры.Вставить("Н", Тип("Число"));
Действие = Фрагмент.Скомпилировать();
Время = Действие.Выполнить(Н);
Сообщить(Время);
КонецПроцедуры