1. 程式人生 > >ac數論之n次方取模

ac數論之n次方取模

傳送門

次方求模

時間限制: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

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int pow(long long int a,long long int n,long long int b)
{//快速冪求模
    a=a%b;//初始化化底數取模
    int result=1;
    while(n>0)
    {
        if(n%2==1)//如果是n
            result=result*a%b;//多乘一次取模
        a=a*a%b;//相乘取模
        n=n/2;//左移一位
    }
    return result;
}
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        long long int a,n,b;
        scanf("%lld%lld%lld",&a,&n,&b);//讀入三個數
        printf("%d\n",pow(a,n,b));
    }
    return 0;
}