unsigned char power( unsigned char base, unsigned char exponent, unsigned modulus ) { if ( exponent == 0 ) return 1; /* Pozor, ‹unsigned char› se v aritmetických operacích implicitně * povyšuje na (znaménkový) ‹int› a násobení pak může přetéci. * Přetypujeme-li jeden z činitelů explicitně na ‹unsigned›, bude * na ‹unsigned› implicitně přetypován i druhý činitel; součin * bude také typu ‹unsigned› a k přetečení nedojde. */ unsigned squared = ( unsigned ) base * base % modulus; unsigned x = power( squared, exponent / 2, modulus ); return exponent % 2 ? base * x % modulus : x; }