ny 102 次方求模

次方求模

时间限制: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

View Code
#include <iostream>
using namespace std;
long long  f(long long a,long long b,long long c)
{
    long long yu;
    if(a%c==0) return 0;
    else if(a>c) a%=c;
    else ;
    if(b==1) return a;
    if(b%2==0)
    {
        b=b/2;  
        long long  y=f(a,b,c);
        yu=y*y%c;
    }
    else
    {
        b=b/2;
        yu=f(a,b,c)*f(a,b+1,c)%c;
    }
    return yu;
}
int main()
{
    int icase;
    long long a,b,c;
    cin>>icase;
    while(icase--)
    {
        cin>>a>>b>>c;
        cout<<f(a,b,c)<<endl;
    }
    return 0;
}
posted @ 2012-08-13 14:54  luosw  阅读(144)  评论(0编辑  收藏  举报