#include #include #include #include int main(int argc, char *argv[]) { int debug=0; switch(argc) { case 1:break; case 2: if(strcmp(argv[1],"-v")==0 || strcmp(argv[1],"--verbose")==0) debug=1; break; default:return 1; } int a=2,b; mpz_t digit,maximum,power,sum_digits; mpz_init(digit); mpz_init_set_si(maximum,0); mpz_init(power); mpz_init(sum_digits); for(;a<100;a++) for(b=2;b<100;b++) { mpz_set_si(sum_digits,0); mpz_ui_pow_ui(power,a,b); do { mpz_tdiv_qr_ui(power,digit,power,10); mpz_add(sum_digits,sum_digits,digit); }while(mpz_cmp_si(power,0)>0); if(mpz_cmp(sum_digits,maximum)>0) { mpz_set(maximum,sum_digits); if(debug==1) { gmp_printf("%Zd is the new maximum sum ",maximum); gmp_printf("of digits reached with %i^%i \n",a,b); } } } gmp_printf("\n\t%Zd\n\n",maximum); return 0; }