4292: [PA2015]Równanie
Time Limit: 1 Sec Memory Limit: 256 MB
Submit: 181 Solved: 94
[Submit][Status][Discuss]
Description
对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和。现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数。
Input
第一行包含三个正整数k,a,b(1<=k,a,b<=10^18,a<=b)。
Output
输出一个整数,即满足条件的n的个数。
Sample Input
51 5000 10000
Sample Output
3
HINT
满足的3个n分别为7293,7854和7905。
Source
因为f的范围最大是9*9*18所以可以直接枚举f。。。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; long long k,a,b,ans; int OK(long long x){ int res = 0; while (x) res+=(x%10)*(x%10),x/=10; return res; } int main(){ scanf("%lld%lld%lld",&k,&a,&b); for(int i=min(b/k,1458ll);i;i--){ long long n = i*k; if (a<=n && n<=b && OK(n)==i) ans++; } printf("%lld",ans); }