令
f(n)
为
n
在十进制下每一位数字的平方和,求
容易发现最大的 f(n) 不会超过 9∗9∗18=1458 ,因此我们枚举 f(n) , O(logn) Check即可
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long k,a,b;
int F(long long x)
{
int re=0;
while(x)
re+=(x%10)*(x%10),x/=10;
return re;
}
int main()
{
int i,ans=0;
cin>>k>>a>>b;
for(i=min(b/k,1458ll);i;i--)
{
long long n=i*k;
if(n>=a&&i==F(n))
++ans;
}
cout<<ans<<endl;
return 0;
}