1. 程式人生 > >快速冪(求模)

快速冪(求模)

補上快速冪的演算法,與快速乘法有區別,乘法是乘,加法是加,看懂了就感覺簡單,也是通過二進位制計算的,其中就是對底數處理一下,防止底數過大爆了,還有就是沒次步驟都進行求餘,也是防止資料過大!

#include <iostream>
using namespace std;
typedef long long int ll;
ll m;
ll quick(ll a ,ll b)
{
    ll abs=a%m;
    ll ans=1;
    while(b)
    {
        if(b&1)
            ans=(ans*abs)%m;
        abs=(abs*abs)%m;
        b>>=1;
    }
    return ans;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>m>>n;
        ll sum=0;
        while(n--)
        {
            ll a,b;
            cin>>a>>b;
            sum=(sum+quick(a,b))%m;
        }
        cout<<sum%m<<endl;
    }
    
}