次方求模

来源:互联网 发布:域名投资 知乎 编辑:程序博客网 时间:2024/06/06 05:22

次方求模

描述

求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

这段说明是借鉴高手的:

有了这个公式,求解问题就简单了,np次方很容易拆分为几个数相乘的形式。其中采用二分法拆分较为简单高效。

我的代码:

#include<iostream>using namespace std;int main(){long long t,sum,a,b,c,n;cin >> n;while (n--){cin >> a >> b >> c ;for (t=a,sum=1;b;){if (b&1){sum*=t;sum%=c;}b>>=1;t=t%c*t%c;sum%=c;}cout << sum << endl;}return 0;}

标程:

 #include<iostream>using namespace std;template<class IntType>inline IntType ModPow(IntType m,IntType n,IntType p) //m的n次方模p{    if (n==1) return m%p;        IntType tmp=ModPow(m,n>>1,p);    return (tmp*tmp%p)*((n%2?m:1)%p)%p;}int main(){int n;long long a,b,c;cin>>n;while(n--){cin>>a>>b>>c;cout<<ModPow(a,b,c)<<endl;}}        


0 0