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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <math.h>

using namespace std;

long long int k;

long long int f(long long int n)
{
	long long int m,suma;
	suma=0;

	for(;n!=0;)
	{
		m=n%10;
		suma+=m*m;
		n=(n-n%10)/10;

	}
	return suma;
}

long long int zakres(long long int m)
{
    //cout<<k*m*81<<endl;
    return k*m*81;
}

int main()
{
	long long int a,b,r;
	int licznik=0;

	long long int licznik_potegi;
	r=0;
	cin>>k;
	cin>>a;
	cin>>b;

    if(a<k)
        a=k;
    else
    {
        licznik=a/k+1;
        a=licznik*k;
    }

    if(a<=10)
        licznik_potegi=1;
    else
        licznik_potegi=log10(a)+1;
    //cout<<licznik_potegi<<endl;

    //cout<<a<<endl;

	for(long long int i=a;i<=b;i=i+k)
	{
		if(i==k*f(i))
		{
			r++;
		}

		if(i>pow(10,licznik_potegi))
        {

            if(i>zakres(licznik_potegi))
                break;
            else
                licznik_potegi++;
        }
	}
	cout<<r;

	return 0;
}