我为什么非要和自己过不去呢?
这题看着就一脸数位DP
容易看出f(n)范围很小,不妨枚举f(n)
枚举f(n)之后,我们可以数位DP算出f(n)*k=n的数量直接判断f(f(n)*k)是否等于f(n)
妈的数位DP调了一晚上没调出来我终于想开了,我为什么非要和我自己过不去呢-_-
#include<iostream>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<bitset>
#include<set>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
#define MAXN 2010
#define MAXM 1010
#define ll long long
#define eps 1e-8
#define MOD 1000000007
#define INF 1000000000
ll K,L,R;
ll ans;
ll cal(ll n){
ll re=0;
while(n){
re+=(n%10)*(n%10);
n/=10;
}
return re;
}
int main(){
ll i;
scanf("%lld%lld%lld",&K,&L,&R);
for(i=0;i<=2000&&i<=R/K;i++){
if(i*K>=L&&cal(i*K)==i){
ans++;
}
}
printf("%lld\n",ans);
return 0;
}
/*
51 5000 10000
*/