快速冪 大數乘法取模

2021-10-19 09:02:42 字數 1445 閱讀 3469

求冪的優化:快速冪+大數相乘取模 = 快速大數冪

快速冪:

在的標頭檔案中自帶的pow 函式在呼叫時需要一系列型別轉換,所以數值並不是很嚴格精確,存在誤差,執行效率低,最好不要用,最好自己編寫。

ll mypow

(ll x, ll n, ll mod)

return res;

}

大數乘法取模:

在計算 x * x % mod 和 res * x % mod 時,由於 x 與 res 都會很大,直接相乘可能溢位 long long 的資料範圍,此時就需要用大數乘法取模的方法。

ll mymul

(ll a, ll b, ll mod)

a <<=1;

if(a >= mod) a = a - mod;

b >>=1;

}return ans;

}

eg.

給定a,b,c,要求按照以下程式計算ans:

ans=1

for(i=1;i<=b;i++)

ans%=c

輸出ans

小明發現這看起來就是大數乘法和大數取模的裸題,但是他忘了怎麼寫了,請你幫幫他!

input

多組輸入,每組資料一行,每行給出3個正整數a,b,c (1<=a,b,c<=1e18)

output

每組資料輸出一行,為答案

sample input

2 10 10000000

5 100 1

0 2 37

sample output

102400

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace std;

ll mul

(ll a,ll b,ll mod)

//大數乘法取模

a=(a+a)

%mod;

b>>=1;

}return ans;

}ll ppow

(ll a,ll b,ll mod)

//快速冪+大數乘法取模=快速大數冪

a=mul(a,a,mod)

; b>>=1;

}return ans;

}int

main()

return0;

}

快速冪 大數取模

首先要知道取餘的公式 a b p a p b p p。那麼冪不就是乘機的累積嗎,由此給出 int fast int a,int b,int p return int t p 順便把大數取模也給出吧,它的原理就是這個取餘公式 a b p a p b p p 那麼大數可以看做每一位的那位數字乘以自身的權...

快速乘法,快速冪(帶取模的)

今天下午剛學到的新東西,快速冪。推薦部落格 理解快速冪我覺得要先理解快速乘法,我是在理解快速乘法的基礎上之後自己推出來的快速冪 計算機的乘法都是換成加法進行計算的,所以當數字比較大的時候,研究快速乘法也是有意義的 快速乘法 a b include using namespace std const ...

快速冪 快速冪取模

快速冪的思想在於快速求解高冪指數的冪運算 複雜度為o log2n 與樸素運算相比有很大的改進 接下來給出 其中有詳解 include include using namespace std typedef long long ll ll pow1 int a,int b 最常規的方法 將冪指數轉化為...