#include <iostream>
#include <algorithm>
using lld = long long int;
using llu = unsigned long long int;
int number_pos(llu n)
{
int i = 0;
while (n > 0)
{
n /= 10;
++i;
}
return i;
}
llu sum_of_squares(llu n)
{
llu sum = 0;
while (n > 0)
{
llu i = n % 10;
sum += i*i;
n /= 10;
}
return sum;
}
int main()
{
std::ios_base::sync_with_stdio(0);
llu k = 0, a = 0, b = 0;
std::cin >> k >> a >> b;
// k * f(n) = n
// f(n) = n/k
llu range_min = std::max({k, a});
llu range_max = std::min({k * number_pos(b) * 81, b});
// std::cout << "[" << range_min << ", " << range_max << "]" << std::endl;
llu start_point = range_min - (range_min % k);
llu matched = 0;
for (llu i = start_point; i <= range_max; i += k)
{
llu sos = sum_of_squares(i);
if (sos * k == i)
{
// std::cout << i << std::endl;
++matched;
}
}
std::cout << matched << std::endl;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <iostream> #include <algorithm> using lld = long long int; using llu = unsigned long long int; int number_pos(llu n) { int i = 0; while (n > 0) { n /= 10; ++i; } return i; } llu sum_of_squares(llu n) { llu sum = 0; while (n > 0) { llu i = n % 10; sum += i*i; n /= 10; } return sum; } int main() { std::ios_base::sync_with_stdio(0); llu k = 0, a = 0, b = 0; std::cin >> k >> a >> b; // k * f(n) = n // f(n) = n/k llu range_min = std::max({k, a}); llu range_max = std::min({k * number_pos(b) * 81, b}); // std::cout << "[" << range_min << ", " << range_max << "]" << std::endl; llu start_point = range_min - (range_min % k); llu matched = 0; for (llu i = start_point; i <= range_max; i += k) { llu sos = sum_of_squares(i); if (sos * k == i) { // std::cout << i << std::endl; ++matched; } } std::cout << matched << std::endl; return 0; } |
English