AI智能
改变未来

【模板】普通快速幂(quick_pow)


简单的快速幂模板

例题:P1226 【模板】快速幂||取余运算
在这里,我选用的是函数的方式来做快速幂的模板,拿落谷的这道作为例题,有利于对快速幂的初步学习。

快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(logN),与朴素的O(N)相比效率有了极大的提高。

简单来说,就是个二分求模的过程。已经有DaLao讲过证明方法,故在此略。

#include <bits/stdc++.h>using namespace std ;typedef long long ll;typedef unsigned long long ull;const int maxn = 2e5 + 10;const int INF = 0x3f3f3f3f;const double eps = 1e-11;const ll mod = 1e9 + 7;ll Mode(ll a, ll b, ll mode){ll sum = 1;if(mode == 1)   //在mode为1的时候需要特判直接返回0(n%1=0)return 0 ;while (b){if (b & 1){sum = (sum * a) % mode;b--;}b /= 2;a = a * a % mode;}return sum;}int main(){ll a,b,c ;scanf(\"%lld%lld%lld\",&a,&b,&c) ;ll d ;d = Mode (a,b,c) ;printf(\"%lld^%lld mod %lld=%lld\\n\",a,b,c,d) ;return 0 ;}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 【模板】普通快速幂(quick_pow)