30^74 по модулю 57 = (3^74 * 10^74) по модулю 3 * 19 = 3 * [(3^73 * 10^74) по модулю 19]
и
(3^73 * 10^74) mod 19 = (3^(18 * 4) * 3 * 10^(18 * 4) * 10^2) mod 19
теперь по малой теореме Фермста (m^р-1) по модулю р = 1):
(3^73 * 10^74) по модулю 19 = (3 * 10^2) по модулю 19 = 300 мод 19 = 15
поэтому
30^74 мод 57 = 3 * 15 = 45
Основная реализация модульного метода возведения в степень, чтобы получить остаток:
long modular_pow(long base, long exponent, long modulus) {
long c = 1;
for (long e_prim = 0; e_prim < exponent; ++e_prim) {
c = (c * base) % modulus;
}
return c;
}
Однако реализация показана @Vikram Бхат является более эффективным.
Разделите дивиденд и делитель на 3, и вы получите простой делитель. – PSkocik
45 (я действительно надеялся, что это будет 42). http://ideone.com/mpZKuj – Henrik
Возможный дубликат [Вычислить модуль числа при мощности certan (число при этой мощности довольно велико)] (http://stackoverflow.com/questions/5433992/calculate- the-module-of-a-number-at-a-certan-power-the-number-at-that-power-is) – ja72