惊了,暴力大法好,大力出奇迹。自信在线写代码提交。
而且C好像有内存加成?同样代码C 756KB,C++ 804KB。毕竟C++特性比较多?好吧我瞎猜的。
由于最大的f(n)很小。。所以枚举就好啦。
#include <stdio.h>
int main() {
long long k, a, b, cnt = 0, i, n, v, u;
scanf("%lld%lld%lld", &k, &a, &b);
for (i = 1; i <= 1500 && i * k <= b; i++) {
n = k * i;
if (n < a || n > b) continue;
for (v = 0; n; u = n % 10, v += u * u, n /= 10);
cnt += v == i;
}
printf("%lld\n", cnt);
return 0;
}
4292: [PA2015]Równanie
Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 264 Solved: 144
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。