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. |