#include <iostream>
//#include <math.h>
int potega(int a)
{
switch(a)
{
case 0:
return 0;
break;
case 1:
return 1;
break;
case 2:
return 4;
break;
case 3:
return 9;
break;
case 4:
return 16;
break;
case 5:
return 25;
break;
case 6:
return 36;
break;
case 7:
return 49;
break;
case 8:
return 64;
break;
case 9:
return 81;
break;
}
}
bool f(long long ak,long long a)
{
long maks;
if(ak>999999999999999999)
maks=1539;
else if(ak>99999999999999999)
maks=1458;
else if(ak>9999999999999999)
maks=1377;
else if(ak>999999999999999)
maks=1296;
else if(ak>99999999999999)
maks=1215;
else if(ak>9999999999999)
maks=1134;
else if(ak>999999999999)
maks=1053;
else if(ak>99999999999)
maks=972;
else if(ak>9999999999)
maks=891;
else if(ak>999999999)
maks=810;
else if(ak>99999999)
maks=729;
else if(ak>9999999)
maks=648;
else if(ak>999999)
maks=567;
else if(ak>99999)
maks=486;
else if(ak>9999)
maks=405;
else if(ak>999)
maks=324;
else if(ak>99)
maks=243;
else if(ak>9)
maks=162;
else
maks=81;
if(maks<a)
return false;
long long int w=0;
for(; ak>0; ak/=10)
{
w+=potega(ak%10);
//w+=(ak%10)*(ak%10);
if(w>a)
return false;
}
if(w==a)
return true;
return false;
}
int main()
{
long long ak,bk,k,a,b,wyn=0;
std::cin>>k>>ak>>bk;
//k=20,ak=pow(10,16),bk=pow(10,16)+pow(10,11);
if(ak%k!=0)
ak+=k-(ak%k);
b=bk/k;
a=ak/k;
for(; a<=b; a++,ak+=k)
if(f(ak,a))
wyn++;
std::cout<<wyn;
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <iostream> //#include <math.h> int potega(int a) { switch(a) { case 0: return 0; break; case 1: return 1; break; case 2: return 4; break; case 3: return 9; break; case 4: return 16; break; case 5: return 25; break; case 6: return 36; break; case 7: return 49; break; case 8: return 64; break; case 9: return 81; break; } } bool f(long long ak,long long a) { long maks; if(ak>999999999999999999) maks=1539; else if(ak>99999999999999999) maks=1458; else if(ak>9999999999999999) maks=1377; else if(ak>999999999999999) maks=1296; else if(ak>99999999999999) maks=1215; else if(ak>9999999999999) maks=1134; else if(ak>999999999999) maks=1053; else if(ak>99999999999) maks=972; else if(ak>9999999999) maks=891; else if(ak>999999999) maks=810; else if(ak>99999999) maks=729; else if(ak>9999999) maks=648; else if(ak>999999) maks=567; else if(ak>99999) maks=486; else if(ak>9999) maks=405; else if(ak>999) maks=324; else if(ak>99) maks=243; else if(ak>9) maks=162; else maks=81; if(maks<a) return false; long long int w=0; for(; ak>0; ak/=10) { w+=potega(ak%10); //w+=(ak%10)*(ak%10); if(w>a) return false; } if(w==a) return true; return false; } int main() { long long ak,bk,k,a,b,wyn=0; std::cin>>k>>ak>>bk; //k=20,ak=pow(10,16),bk=pow(10,16)+pow(10,11); if(ak%k!=0) ak+=k-(ak%k); b=bk/k; a=ak/k; for(; a<=b; a++,ak+=k) if(f(ak,a)) wyn++; std::cout<<wyn; return 0; } |
English