快速冪 高精度求冪

2021-10-18 10:28:47 字數 2146 閱讀 7174

本文講述快速冪的原理,以及用法

定義:快速求,取base為底數的exp次冪,即求:baseexp;

時間複雜度: o(log₂n)

思想:每一步都把指數分成兩半,而相應的底數做平方運算。不僅能把非常大的指數給不斷變小,所需要執行的迴圈次數也變小,而最後表示的結果卻一直不會變。

原理:(a* b) % m = ((a % m) * (b % m)) % m

**塊:

#include 

using namespace std;

typedef long long ll;

ll pow1(ll my_base, ll my_exp)

int main(

)

**塊:

#include 

using namespace std;

typedef long long ll;

ll pow2(ll x, ll y)

return ans;

}int main(

)

**塊:

#include 

using namespace std;

typedef long long ll;

ll pow3(ll my_base, ll my_exp)

int main(

)

**塊:

#include 

using namespace std;

typedef long long ll;

ll pow3(ll my_base, ll my_exp)

base *= base;

my_exp >>

= 1;

}return ans;

}int main(

)

**塊:

#include 

using namespace std;

typedef long long ll;

const ll mod = 1e7; //自定義取模的資料,視資料大小的情況而定

//a ^ b

ll ksm(ll a, ll b, ll mod)

base =

(base * base) % mod;

b >>

= 1; //右移1位,刪去最低位。

}return ans;

}int main(

)

**塊:

程式**:

第一種寫法:

#include

using

namespace std;

typedef

long

long ll;

/*long long qmod(ll a,ll b,int c)

} */

//用二分還是超時

ll qmod

(ll a,ll b,ll c)

//快速冪

return r;

}int

main()

}

第二種寫法:

n, m =

map(

int,

input()

.split())

sum=

pow(m+

1,n,

998244353

)print

(sum

)

本文講述快速冪的基本用法。

如有錯誤,敬請指教!

高精度 高精度冪

時間限制 1 sec 記憶體限制 64 mb 題目描述 經過測試,修羅王發現開啟魔法手銬的方法是需要求乙個正整數a 1輸入 包含兩個數字,即a和n。輸出輸出結果的最後1000位。複製樣例資料 2 10樣例輸出 1024注意c陣列不能只取1000為萬一第1000為為0不就捨掉了,到最後在輸出1000位...

POJ 1001 求高精度冪

題目描述 對數值很大 精度很高的數進行高精度計算是一類十分常見的問題。比如,對國債進行計算就是屬於這類問題。現在要你解決的問題是 對乙個實數r 0.0 r 99.999 要求寫程式精確計算 r 的 n 次方 r n 其中n 是整數並且 0 n 25。解題思路 很簡單的一道高精度題目。話不多說直接上 ...

麥森數 高精度 快速冪

快速冪模板 求a b int ans 1 while b 0 printf d n ans 高精度乘高精度模板 void cheng int a,int b c 0 a 0 b 0 for int i 0 i10 while c k 0 c 0 如下 include include includeu...