В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
12R34O56M78A
12R34O56M78A
07.02.2023 00:52 •  Информатика

Сегодня на уроке информатики рассказывали про то, как получать все простые числа, не превосходящие заданного числа, с метода, который называется решето эратосфена. метод заключается в следующем: пусть мы хотим найти все простые числа от 2 до 100. выпишем числа от 2 до 100, затем возьмем первое число (2), его оставим, а все остальные делящиеся на 2 числа вычеркнем. затем возьмем первое невычеркнутое число, отличное от 2, это 3. его оставим, а все остальные еще невычеркнутые и делящиеся на 3 вычеркнем. затем опять возьмем первое невычеркнутое число, отличное от 2 и 3, это 5, его оставим, а все остальные еще невычеркнутые и делящиеся на 5 вычеркнем. и так далее. в итоге останутся невычеркнутыми только простые числа. игорю этот метод понравился и он решил с его найти все простые числа, не превосходящие 954530. какое число он вычеркнет последним? считаем, что каждое число может быть вычеркнуто ровно один раз. то есть, если 30 вычеркнули как делящееся на 2, то вычеркнуть его же как делящееся на 3 мы уже не можем.

Показать ответ
Ответ:
benjulia
benjulia
09.10.2020 03:12

Program Resheto;

const n=954530;

var i,j,last,k:integer;

   b:array[1..n] of boolean;

begin

 for j:=1 to n do b[j]:=true; ///сначала все числа не вычеркнуты

 b[1]:=false; ///единицу вычеркиваем сразу

 i:=2;k:=0; ///k - количество найденных простых чисел

 while i*i<=n do

 begin

   for j:=i+1 to n do  

   begin

     if (b[j]) then ///если число уже вычеркнуто,то ничего не делаем

     begin

       if (j mod i=0) then begin last:=j; b[j]:=false; end; ///если число делится,то запоминаем его в last и вычеркиваем из решета

     end;  

   end;

   inc(i);

 end;

 for j:=2 to n do if b[j] then inc(k); ///считаем количество

 writeln; writeln('Последнее вычеркнутое: ',last);writeln('Найдено простых чисел: ',k);

 for j:=2 to n do if b[j] then write(j,' '); ///выводим все простые числа через пробел

end.


Сегодня на уроке информатики рассказывали про то, как получать все простые числа, не превосходящие з
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота