program ROW;//Runda próbna z 22.09.2015
type Ti=longint;
var a,b,k,n,npocz,nkonc:qword;
c,fn,lrozw:Ti;//licznik rozwiazan
kfn:extended;
const s=1458;//81*18
function f(n:qword):Ti;//suma kwadratów cyfr liczby n
var c2,il:qword;
begin c:=n mod 10;//ostatnia cyfra
c2:=sqr(c); il:=n div 10;
if il=0 then f:=c2 else f:=c2+f(il)
end;//f
begin
lrozw:=0;
readln(k,a,b);
npocz:=((a+k-1) div k)*k;
n:=npocz;//najmniejsze n z przedzialu [a,b] podzielne przez k
while n<=b do
begin //testowanie zmiennej n
fn:=f(n); kfn:=k; kfn:=k*fn;
if not (kfn>1e18) then
if k*fn=n then lrozw+=1;//n=k*f(n)>1e18
n+=k;//kolejna liczba podzielna przez k
if n/s>k then break
{wobec f(n)>=s, nie ma potrzeby testowania liczb n>k*s}
end;
writeln(lrozw);
end.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | program ROW;//Runda próbna z 22.09.2015 type Ti=longint; var a,b,k,n,npocz,nkonc:qword; c,fn,lrozw:Ti;//licznik rozwiazan kfn:extended; const s=1458;//81*18 function f(n:qword):Ti;//suma kwadratów cyfr liczby n var c2,il:qword; begin c:=n mod 10;//ostatnia cyfra c2:=sqr(c); il:=n div 10; if il=0 then f:=c2 else f:=c2+f(il) end;//f begin lrozw:=0; readln(k,a,b); npocz:=((a+k-1) div k)*k; n:=npocz;//najmniejsze n z przedzialu [a,b] podzielne przez k while n<=b do begin //testowanie zmiennej n fn:=f(n); kfn:=k; kfn:=k*fn; if not (kfn>1e18) then if k*fn=n then lrozw+=1;//n=k*f(n)>1e18 n+=k;//kolejna liczba podzielna przez k if n/s>k then break {wobec f(n)>=s, nie ma potrzeby testowania liczb n>k*s} end; writeln(lrozw); end. |
English