#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; } |