← Назад к математике

Обратное число по модулю

Нахождение обратного элемента по простому модулю (малая теорема Ферма)

🐍 Python
a, mod = map(int, input().split())
a %= mod

def bin_pow(a, b):
    if b == 0:
        return 1 % mod
    if b % 2 == 0:
        x = bin_pow(a, b // 2)
        return (x * x) % mod
    else:
        return (a * bin_pow(a, b - 1)) % mod

def mod_inverse(x):
    return bin_pow(x, mod - 2)

if a == 0:
    print(-1)
else:
    print(mod_inverse(a))
⚙️ C++
#include <bits/stdc++.h>
using namespace std;

long long bin_pow(long long a, long long b, long long mod) {
    long long res = 1;
    while (b > 0) {
        if (b & 1) res = (res * a) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return res;
}

int main() {
    long long a, mod;
    cin >> a >> mod;
    
    a %= mod;
    
    if (a == 0) {
        cout << -1 << endl;
        return 0;
    }
    
    cout << bin_pow(a, mod - 2, mod) << endl;
    return 0;
}

Малая теорема Ферма

a^(p-1) ≡ 1 (mod p), где p — простое, a не кратно p

Отсюда следует, что обратный элемент к a по модулю p равен:

a^(-1) ≡ a^(p-2) (mod p)

Бинарное возведение в степень

Алгоритм возведения числа в степень за O(log n):

Условия применимости

Временная сложность: O(log mod)

Формат ввода и вывода

Ввод: a mod — число и модуль (простое число)

Вывод: обратный элемент или -1, если a кратно модулю

Пример:

3 7

Обратный элемент к 3 по модулю 7: 3·5 = 15 ≡ 1 (mod 7) → 5

Вывод: 5

Попробовать онлайн

Результат появится здесь...