题目背景Background
qiancl 得到了一张藏宝图,上面写了一道谜题
题目描述Description
定义F(n)为n在十进制下各个数位的平方和,求区间[a,b]中有多少 n满足
输入描述(coffin.in) Input Description
一行三个正整数k,a,b
输出描述(coffin.out) Output Description
一行一个整数表示满足条件的n 的个数
样例输入Sample Input
51 5000 10000
样例输出Sample Output
3
数据范围及提示Data Size & Hint
测试数据 | 对应数据范围 |
---|---|
其中12个测试点 | |
其中6个测试点 | |
剩下32个测试点 |
样例中满足的3 个n 分别是7293,7854,7905
36%
你发现 n 一定是k的倍数,然后暴力枚举即可
100%
感觉好假,18*81,如果每位都是9也最多只有这么大,枚举时判一下
#include <cstdio>
using namespace std;
#define LL long long
LL a,b,k,ans,cnt;
int sqr[15];
bool check(LL x) {
LL sum=0;
for (LL i=x;i;i/=10) sum+=sqr[i%10];
if (sum*k==x) return 1;
else return 0;
}
int main() {
freopen("coffin.in","r",stdin);
freopen("coffin.out","w",stdout);
scanf("%lld%lld%lld",&k,&a,&b);
for (int i=0;i<=9;i++) sqr[i]=i*i;
while (cnt<a) cnt+=k;
while (cnt<=b && cnt/k<=1500) {
ans+=check(cnt);
cnt+=k;
}
printf("%lld",ans);
}