基础算法(五)次方求模

2019-04-14 18:02发布

1.问题描述 求a 的 b 次方对 c 取余的值。 输入:第一行输入一个整数 n ,表示测试数据的组数(n <100),每组数据只有一行,其中有三个正整数 a,b,c(1 ≤a,b,c≤10000000000) 输出:a的b次方对c取余之后的结果。 样例输入:
3 2                3                  5 3                100              10 11               12345          12345  
样例输出:
3 1 10481 
2.解决方法 1)将幂拆解为多个底数的平方次的积; 2)如果指数为偶数,把指数除以2,并让底数的平方次取余 ; 3)如果指数为奇数,就把多出来的底数记录下来,再执行偶数次操作。 3.代码实现 #include using namespace std; long long PowerMod(long long a,long long b,long long c) { long long ans = 1; while(b) { if(b % 2) ans *= a %c; a = a*a%c; b /= 2; } ans %= c; return ans; } int main() { int T; cin>>T; while(T--) { long long a,b,c,ans; cin>>a>>b>>c; ans = PowerMod(a,b,c); cout<