题意:对于一个正整数n,定义f(n)为n在十进制下每一位的平方和,求在n属于[a,b]中满足k*f(n)=n的个数 (a、b、k<=10^18)
我们很容易发现,k、a、b数据范围大的变态,但是f(n)的范围是 [1,9*9*18],而 a、b、k均为已知
所以我们可以通过枚举f(n)然后check即可
const
maxn=1458;
var
a,b,k,t,ans :int64;
i :longint;
function f(x:int64):longint;
var
ans:longint;
begin
ans:=0;
while (x>0) do
begin
inc(ans,sqr(x mod 10));
x:=x div 10;
end;
exit(ans);
end;
begin
read(k,a,b); ans:=0;
for i:=1 to maxn do
begin
t:=k*int64(i);
if (t>=a) and (t<=b) and (i=f(t)) then inc(ans) else
if (t>b) then break;
end;
writeln(ans);
end.
——by Eirlys