→题目链接←
最开始以为要什么高端无比的东西搞一搞...
然后觉得一点都不水,不想做了
再然后发现可以暴力枚举f(n),然后判断k*f(n)是否在[a,b]区间内,然后再判断k*f(n)的平方和是否等于f(n)
如果都符合,ans++
然后就很棒棒了
代码:
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll k,a,b;
ll ans=0;
bool check(int x,ll y){
ll sum=0;
while(y>0){
sum+=(y%10)*(y%10);
y/=10;
}
if(sum==x)return true;
return false;
}
int main(){
scanf("%lld%lld%lld",&k,&a,&b);
for(int i=1; i<=2333 && i<=b/k; i++){
ll x=(ll)k*i;
if(a<=x && x<=b && check(i,x))ans++;
}
printf("%lld\n",ans);
return 0;
}