【模板】快速冪&取余運算
阿新 • • 發佈:2019-04-12
取余 lld http latex clas long long scan org www
輸入\(b\),\(p\),\(k\)的值,求\(b^p mod k\)的值。其中\(b\),\(p\),\(k^2\)為長整型數。
1.普通做法
\(print\) \(pow(b,p)\)\(mod\)\(k\)
詳見數據範圍。於是我們需要手動執行冪運算。
2.依然是普通做法
for (int i=1;i<=p;i++)
{
ans*=b;
ans%=k;
}
T飛吧qwq
3.(依靠位運算的)快速冪
不想解釋……太懶了(累)
(畢竟這種東西解釋起來需要大量LaTeX)
當作一篇保存的模板吧……沈下去吧……如果有人真的是為了學習誤入了這裏,那麽右轉;
#include <cstdio> #define ll long long ll k; ll power(ll a,ll b) { ll ans=1,base=a; while (b>0) { if (b&1) { ans*=base; ans%=k; } base*=base; base%=k; b>>=1; } return ans; } int main() { ll b,p; scanf("%lld%lld%lld",&b,&p,&k); printf("%lld^%lld mod %lld=%lld",b,p,k,power(b,p)%k); return 0; }
【模板】快速冪&取余運算