您的位置:首页 > 大数据 > 人工智能

POJ.1995 Raising Modulo Numbers (快速幂)

2017-04-30 22:40 344 查看

POJ.1995 Raising Modulo Numbers (快速幂)

提议分析

快速幂裸题

分别给出递归写法和位运算写法。

感觉位运算应该会更快一点,实际上这两个跑的一样快。不知道为什么(摊手

代码总览

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#define INF 0x3f3f3f3f
#define nmax 200
#define MEM(x) memset(x,0,sizeof(x))
using namespace std;
//long long pow_mod(int a, int n, int m)
//{
//    if(n == 0) return 1;
//    long long  x = pow_mod(a,n/2,m);// 每次砍一半
//    long long ans = x * x % m;
//    if(n%2 == 1) ans *= a % m;
//    return ans;
//}
int qpow_mod(int a,int n, int m)
{
int ans = 1;
while(n){
if(n&1) ans = ans * a % m;
n >>= 1;
a = ((a%m)*(a%m))%m;
}
return ans;
}
int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
int m,n;
scanf("%d %d",&m,&n);
int ans = 0;
for(int i = 0; i<n;++i){
int a,b;
scanf("%d%d",&a,&b);
ans+= qpow_mod(a,b,m);
ans = ans % m;
}
printf("%d\n",ans);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: