題目大意:
對於一個正整數 n,定義 f(n) 爲它十進制下每一位數字的平方的和。
現在給定三個正整數 k,a,b,請求出滿足 a≤n≤b 且 k×f(n) = n 的 n 的個數。
1 ≤k,a,b≤
分析:
這道題的數據規模看上去很嚇人,注意到最多有18位數,且每一位上的數字最大是9,所以
再檢驗一下n的每一位數字的平方和是否等於sum就ok了。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL mxs=1458;
LL k,a,b,ans;
int main()
{
scanf("%lld%lld%lld",&k,&a,&b);
LL side=min(mxs,b/k);
for(LL i=1;i<=side;i++){
LL n=k*i;
LL cnt=0;
while(n){
cnt+=(n%10)*(n%10);
n/=1LL*10;
}
if(cnt==i&&a<=k*i&&k*i<=b)
ans++;
}
printf("%lld",ans);
return 0;
}