СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Задача №629 Совершенные числа. Условие задачи из дистанционного курса подготовки по информатике.

Категория: Информатика

Нажмите, чтобы узнать подробности

Задача №629. Совершенные числа

Задача решена на 100%.

Ссылка на сайт:

http://informatics.mccme.ru/mod/statements/view.php?id=634#1

    Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.

   Число называется совершенным, если оно равно сумме всех своих делителей, меньших его самого. Требуется найти все совершенные числа от M до N.

Просмотр содержимого документа
«Задача №629 Совершенные числа. Условие задачи из дистанционного курса подготовки по информатике.»

Задача №629. Совершенные числа

Ссылка на сайт:

http://informatics.mccme.ru/mod/statements/view.php?id=634#1

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.

Число называется совершенным, если оно равно сумме всех своих делителей, меньших его самого. Требуется найти все совершенные числа от M до N.

Входные данные

В первой строке находятся разделённые пробелом числа M и NM и Nцелые, 1 M N 109, (N - M) * sqrt(N) 107.

Выходные данные

В каждой строке вывести по одному числу в порядке возрастания. Если совершенных чисел в промежутке нет, вывести "Absent".

Примеры:

Входные данные

6 496

Выходные данные

6

28

496

Задача решена на 100%.

Uses crt;

var i,n,m,j,k,h:longint;

b:boolean;

a:array[1..100000]of longint;

function prost(x:integer):integer;

Var g,res,y:integer;

Begin

y:=1;

for g:=1 to x do

y:=2*y;

y:=y-1;

res:=0;

for g:=2 to round(sqrt(y)) do

if y mod g =0 then begin res:=1;

break;

end;

prost:=res;

End;

function vstep(j:integer):longint;

Var y,g,t:longint;

begin

y:=1; t:=1;

for g:=1 to j-1 do

y:=y*2;

t:=y*2-1;

vstep:=y*t;

End;

begin

read(m,n);

b:=false;

a[1]:=6;

i:=1;

for j:=3 to 13 do

if prost(j)=0 then begin inc(i);

a[i]:=vstep(j);

end;

h:=i;

for i:=1 to h do

if (a[i]=m)and(a[i]

b:=true;

end;

if b then exit

else writeln('Absent');

End.