1. 程式人生 > 其它 >NYOJ----次方求模

NYOJ----次方求模

次方求模

時間限制:1000 ms  |  記憶體限制:65535 KB

難度:3

描述

求a的b次方對c取餘的值

輸入第一行輸入一個整數n表示測試資料的組數(n<100)

每組測試只有一行,其中有三個正整數a,b,c(1=<a,b,c<=1000000000)輸出輸出a的b次方對c取餘之後的結果樣例輸入

3
2 3 5
3 100 10
11 12345 12345

樣例輸出

3
1
10481

一眼就可以看到,資料很大,對於O(n)的時間複雜度,顯然是過不了的....採用乘方去模的。。。比採用快速求冪要好的多.....貼下程式碼吧!!

#include<iostream>
using namespace std;
int main()
{
    long long  n, a,b,c,ans;
       cin>>n;
   while(n--)
   {
       cin>>a>>b>>c;
       a%=c;
       ans=1;
       while(b)
       {
         if(b&1)
         {
             ans*=a;
             ans%=c;
         }
         a*=a;
         a%=c;
         b>>=1;
       }
       cout<<ans<<endl;
   }
   return 0;
}