Мощность экспоненцирование Fast Fast модулю

1. Быстрая мощность

Быстрое количество мощности базового относится к быстрому вычислительной мощности Ь, с помощью битовой операции, чтобы уменьшить количество циклов, чтобы достичь быстрых результатов.

Битовые операторы: и двоичные арифметические правила: 1 & 1 = 1, 0 & 1 = 0.

реализация кода

int Pow(int a,int b){
    int ans = 1;
    int base = a;
    while(b)
    {
        if(b & 1)
        {
         ans *= base;
        }
        base *= base;
        b >>= 1;
    }
    return ans;
}

Примечание:
Если заявление относится к Ь и 1 б преобразуются в двоичный, см последнего бит 1, 0 хита, уставшие ездить, 1 хит, будет умножать значение , умноженное усталым ответить.
в то время как петля Ь >> = 1, операцию сдвига, движение справа от Ь, встретиться на следующий , если заявление, последний оригинал получается в первом (также эквивалентно исходному значению в дополнение к Ь 2).

2. Быстро взяв власть
за власть к модулю, фокус находится в процессе поиска мощности по модулю, если мы непосредственно использовать модульную арифметику на самом деле очень медленно. Таким образоммы могли бы также добавить некоторое содержаниекогда спросэлектроэнергию быстро, такполучить результаты.

Она должна быть теоремой: (а ^ Ь) мод с = (мод в) ^ б мод с.

Основной код:

int pow_mod(int a,int b,int c)
{
    int ans = 1;
    int base = a%c;
    while(b)
    {
        if(b & 1) ans = (ans*base)%c;
        base = (base*base)%c;
        b >>= 1;
    }
    return ans;
}

Теорема внутри, чтобы иметь базовый номер операции по модулю. Здесь мы находимся в момент назначения на базу по модулю. Тогда для каждого по модулю назад, мы на самом деле использовать скорость распространения, таким образом, чтобы достичь мощности по модулю.

Освобожденные четыре оригинальных статей · вона похвала 0 · Просмотров 94

рекомендация

отblog.csdn.net/m0_45861545/article/details/104032215