#include <stdio.h>
#include <string.h>
unsigned long a, k, b;
unsigned int getLength(unsigned long val)
{
int retval;
retval = 1;
while(val > 9)
{
val /= 10;
retval++;
}
return retval;
}
unsigned int f(unsigned long val)
{
unsigned retval = 0;
int pom;
do {
pom = val % 10;
retval += pom * pom;
val /= 10;
} while(val > 0);
return retval;
}
int main ()
{
unsigned int iloscCyfr;
unsigned long loopMin, loopMax, i;
unsigned result = 0;
scanf("%ld %ld %ld", &k, &a, &b );
iloscCyfr = getLength(b);
loopMax = 9 * 9 * iloscCyfr; // maksymalna wartość f(n)
if (b/k < loopMax)
loopMax = b;
else
loopMax *= k;
loopMin = a / k ; // minimalna wartość wielokrotności k
if(loopMin * k < a)
loopMin++;
loopMin *= k; // minimalna wartość liczby n
for( i = loopMin; i <= loopMax; i+= k)
{
if(f(i) * k == i)
{
result++;
// printf("\n%d", i);
}
}
printf("%d", result);
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 58 59 | #include <stdio.h> #include <string.h> unsigned long a, k, b; unsigned int getLength(unsigned long val) { int retval; retval = 1; while(val > 9) { val /= 10; retval++; } return retval; } unsigned int f(unsigned long val) { unsigned retval = 0; int pom; do { pom = val % 10; retval += pom * pom; val /= 10; } while(val > 0); return retval; } int main () { unsigned int iloscCyfr; unsigned long loopMin, loopMax, i; unsigned result = 0; scanf("%ld %ld %ld", &k, &a, &b ); iloscCyfr = getLength(b); loopMax = 9 * 9 * iloscCyfr; // maksymalna wartość f(n) if (b/k < loopMax) loopMax = b; else loopMax *= k; loopMin = a / k ; // minimalna wartość wielokrotności k if(loopMin * k < a) loopMin++; loopMin *= k; // minimalna wartość liczby n for( i = loopMin; i <= loopMax; i+= k) { if(f(i) * k == i) { result++; // printf("\n%d", i); } } printf("%d", result); return 0; } |
English