М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
nikzakora
nikzakora
28.11.2022 18:04 •  Информатика

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

👇
Ответ:
EvgeshaKhomenco2005
EvgeshaKhomenco2005
28.11.2022

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.


Сегодня на уроке информатики рассказывали про то, как получать все простые числа, не превосходящие з
4,4(64 оценок)
Открыть все ответы
Ответ:
Anna2271
Anna2271
28.11.2022

уточнять на каком языке программирования нужно написать задачки. Я же напишу на С++. Алгоритм везде будет один и тот же.

1 задача

int x1 = 0;

int x2 = 0;

int x3 = 0;

int x4 = 0;

int x5 = 0;

cin >> x1;

cin >> x2;

cin >> x3;

cin >> x4;

cin >> x5;

double sr = 0.0;

sr = (x1+x2+x3+x4+x5)/5;

Или же можно сделать по проще

int x = 0;

int sum = 0;

double sr = 0.0;

for(int i = 0; i<5; i++){

cin >> x;

sum = sum +x;

}

sr = sum/5;

2 Задача

int number = 5;

for(int i = 2; i<20; i=i+2){

number = number + i;

}

4,6(88 оценок)
Ответ:
gamezarif
gamezarif
28.11.2022

1) program exec;

var a:array[1..20] of integer;

var p,i:integer;

begin

randomize;

for i:=1 to 20 do begin

a[i]:=random(50);

writeln (a[i]);

if (a[i] mod 2<>0) then p:=p+1;

end;

if (p>0) then writeln ('Присутствуют нечётные элементы')

else writeln ('Не присутствуют нечётные элементы');

end.

2) program exec;

var a:array[1..20] of integer;

var p,i:integer;

begin

randomize;

for i:=1 to 20 do begin

a[i]:=random(50);

writeln (a[i]);

if (a[i] mod 2=0) then a[i]:=a[i]+1

else a[i]:=a[i]*2;

end;

writeln ('---'); // разделение двух массивов

for i:=1 to 20 do writeln (a[i]);

end.

4,8(92 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ