Сегодня на уроке информатики ведали про то, как получать все простые

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

Задать свой вопрос
1 ответ

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*ilt;=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.

, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт