演算法 快速冪 Leo Jose

2021-09-19 23:41:48 字數 821 閱讀 7180

具體模版參見

這三題的題面都是:

給出三個數a,b,p,求a^b%p的值

乍一看很簡單,每一輪都乘以b,然後%p, (每次相乘都%p是不會爆掉的)

#include #include using namespace std;

unsigned long long a,b,p;

int main()

} + 2^} + ... + 2^}" class="mathcode" src=""/>

將這個數用這種方法加起來,比幼兒園的小孩乙個個地加要快得多,o(n)直接優化成了o(

所以相乘的時候也是一樣的

如果我要求

所以原來要列舉11遍的現在只用枚3遍了

但是,問題來了

我該怎麼判斷要加上2的幾次方呢?

這就得讓二進位制登場了

拿11舉例,11的二進位制是1011,(從左往右數)第四位表示的是

所以11就是

所以每一輪都可以將指數的個位求出來,然後 右移去掉個位就ok了

但是,問題來了

怎麼求個位呢?

前面講到的與運算就派上用場了。

因為除非兩個數都是1, 才會返回1, 否則返回0, 所以直接將乙個數&1, 判斷的就是個位了,如果個位是1, 就返回1,如果個位是0, 就會返回0

至此,快速冪講解完畢了

int fast_multiply(int x, int y, int p)//代表x的y次方%p

return ans;

}

(別以為我會寫好主程式的)

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...

快速冪演算法

在 上一直沒有找到有關於快速冪演算法的乙個詳細的描述和解釋,這裡,我給出快速冪演算法的完整解釋,用的是c 語言,不同語言的讀者只好換個位啦,畢竟讀 c的人較多 所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模 餘 在程式設計過程中,經常要去求一些大數對於某個數的餘數,為了得...

快速冪演算法

模運算 公式 a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n 要保證n是整數 要知道a mod n和b mod n都是比n小的 利用這些共識可以有效地防止溢...