bzoj 4292 枚举

来源:互联网 发布:金芒网络电玩城 编辑:程序博客网 时间:2024/04/30 12:18

题意:对于一个正整数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



0 0