fzu1752(坑!!!)

Description

Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).

Input

There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.

Output

For each testcase, output an integer, denotes the result of A^B mod C.

Sample Input

3 2 42 10 1000

Sample Output

124


这题太坑了,不想说了微笑!!!!!!数据大的可以卡死你




#include <iostream>
#include<stdio.h>
using namespace std;
typedef  __int64 ll;
ll quick(ll a,ll b,ll n)
{
    a=a%n;
    b=b%n;
    ll ans=0;
    while(b)
    {
    if(b&1)
    {
        ans=ans+a;
    if(ans>n)ans-=n;
    }
    a=a<<1;
    if(a>=n) a-=n;
        b>>=1;
    }
    return ans;
}
int main()
{
    ll a,b,n,ans;
    while(scanf("%I64d%I64d%I64d",&a,&b,&n)>0)
    {
        ans=1;
        a=a%n;
        while(b)
        {
            if(b&1)
            ans=quick(ans,a,n);
            a=quick(a,a,n);
            b>>=1;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}



posted @ 2015-08-05 20:17  martinue  阅读(129)  评论(0编辑  收藏  举报