题目大意:对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和。现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数
题解:数位dp
f(x)最大值只有9*9*18=1458
枚举f(x),单次logn check即可
我的收获:233333
#include <bits/stdc++.h>
using namespace std;
long long k,a,b,ans;
int F(long long x)
{
int ret=0;
while(x) ret+=(x%10)*(x%10),x/=10;
return ret;
}
void work()
{
cin>>k>>a>>b;
for(int i=1;i<=1500;i++)
{
long long x=k*i;
if(x>b) break;
if(x<a) continue;
ans+=F(x)==i;
}
cout<<ans<<endl;
}
int main()
{
work();
return 0;
}