BZOJ 4292 [PA2015] Równanie - 数位&思维
题目大意:
对于一个正整数 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;
}