首页 > 学院 > 开发设计 > 正文

FZU 1752 A^B mod C (快速幂+快乘)

2019-11-08 01:40:14
字体:
来源:转载
供稿:网友
Time Limit: 1000 mSec    Memory Limit : 32768 KB

PRoblem 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

Source

FZU 2009 Summer Training IV--Number Theory

为了防止相乘溢出,所以就用加减来实现,此外这个oj不支持%lld 我在这里也出错了几次,大家要注意哦 !!

#include<stdio.h>using namespace std;#define ll long longll mulmod(ll a,ll b,ll c){    ll ans=0;    while(b)    {        if(b&1)        {            ans+=a;            if(ans>=c) ans-=c;        }        a<<=1;        if(a>=c)  a-=c;        b>>=1;    }    return ans;}ll quickmod(ll a,ll b,ll c){    ll ans=1;    while(b)    {        if(b&1)           ans=mulmod(ans,a,c);//这样写是为了使a*ans和a*a不溢出        a=mulmod(a,a,c);        b>>=1;    }    return ans;}int main(){    ll a,b,c ;    while(~scanf("%I64d%I64d%I64d",&a,&b,&c))    {        a=a%c;        printf("%I64d/n",quickmod(a,b,c));    }    return  0;}


上一篇:C# combox1控件的应用

下一篇:n a^o7 !

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表