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.