Число называется совершенным, если оно равно сумме всех своих делителей, меньших его самого. Требуется найти все совершенные числа от n до m (1 <= n,m <=100000)
Ввод
Два числа n и m
Вывод
В каждой строке вывести совершенные числа на промежутке от n до m. Если таких нет, вывести Absent.
Пример
______
6 6
6
______
4 5
Absent
______
Решение
Циклом бежим от n до m и находим сумму делителей числа i. Если сумма равна i, тогда выводим число i.
var n,m,i:int64; f:boolean; function pr(x:int64):boolean; var d,s:int64; begin s:=1; if(x=1)then begin pr:=false; exit; end; d:=2; while int64(d)*d<x do begin if(x mod d=0)then s:=s+d+(x div d); d:=d+1; end; if d*d=x then s:=s+d; pr:=(s=x); //if s=x then pr:=true else pr:=false; end; begin assign(input,'input.txt'); reset(input); assign(output,'output.txt'); rewrite(output); readln(n,m); f:=false; for i:=n to m do if(pr(i))then begin writeln(i); f:=true; end; if not(f) then writeln('Absent'); end.