nyoj 102 次方求摸 快速幂

来源:互联网 发布:龙腾软件上传宝贝淘宝 编辑:程序博客网 时间:2024/05/23 14:39

点击打开链接

次方求模

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

求a的b次方对c取余的值

 

输入
第一行输入一个整数n表示测试数据的组数(n<100)
每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000)
输出
输出a的b次方对c取余之后的结果
样例输入
32 3 53 100 1011 12345 12345
样例输出
3110481

把指数反复二分。最后再合并,很裸的快速幂,注意题目中没有0次方的情况,否则递归的if要改成if(b == 0) return 1;

 #include<stdio.h>int f(int a, int b , int c){if(b == 1)return a % c;long long num;num = f(a , b/2 , c);if(b % 2 == 1)num = ((num * num % c) * a) % c;elsenum = (num * num) % c;return num;}int main(){int  num;int a , b , c;scanf("%d" , &num);while(num--){scanf("%d %d %d" , &a , &b , &c);if(a == c || c == 1)printf("0\n");elseprintf("%d\n" , f(a , b , c));}return 0;}