POJ 1995 Raising Modulo Numbers (快速幂)

题意:

思路:

对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模。

#include <cstdio>

typedef long long LL;

LL Ksm(LL a, LL b, LL p) {
  LL ans = 1;
  while(b) {
    if(b & 1) {
      ans = (ans * a) % p;
    }
    a = (a * a) % p;
    b >>= 1;
  }
  return ans;
}

int main() {
  LL p, a, b;
  int T;
  int n;
  scanf("%d", &T);
  while(T--) {
    scanf("%lld%d", &p, &n);
    LL ans = 0;
    while(n--) {
      scanf("%lld%lld", &a, &b);
      ans = (ans + Ksm(a, b, p)) % p;
    }
    printf("%lld\n", ans);
  }
  return 0;
}
时间: 2024-10-10 05:09:52

POJ 1995 Raising Modulo Numbers (快速幂)的相关文章

POJ 1995 Raising Modulo Numbers (快速幂模板)

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4938   Accepted: 2864 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

POJ 1995 Raising Modulo Numbers (数论-整数快速幂)

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4379   Accepted: 2516 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

poj Raising Modulo Numbers 快速幂模板

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8606   Accepted: 5253 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

POJ1995 Raising Modulo Numbers(快速幂)

POJ1995 Raising Modulo Numbers 计算(A1B1+A2B2+ ... +AHBH)mod M. 快速幂,套模板 /* * Created: 2016年03月30日 23时01分45秒 星期三 * Author: Akrusher * */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #

poj 1995 Raising Modulo Numbers

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4987   Accepted: 2887 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

poj 1995 Raising Modulo Numbers 题解

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6347   Accepted: 3740 Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, oth

POJ 1995 Raising Modulo Numbers 【快速幂取模】

题目链接:http://poj.org/problem?id=1995 解题思路:用整数快速幂算法算出每一个 Ai^Bi,然后依次相加取模即可. #include<stdio.h> long long quick_mod(long long a,long long b,long long c) { long long ans=1; while(b) { if(b&1) { ans=ans*a%c; } b>>=1; a=a*a%c; } return ans; } int

POJ 1995 Raising Modulo Numbers(快速幂)

嗯... 题目链接:http://poj.org/problem?id=1995 快速幂模板... AC代码: 1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 int main(){ 7 long long N, M, n, a, b, c, sum = 0; 8 scanf("%lld", &N); 9 while(N--){ 10 scanf("%ll

poj 1995 Raising Modulo Numbers 二分快速幂

题意:给定n对Ai,Bi,求所有Ai的Bi次方之和对M取模的结果: 思路:二分法求快速幂: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; __int64 sum,x,y,t; __int64 mod(__int64 a,__int64 b,__int64 c) { if(b==0) return 1%c; if(b==1) return a%c; t=mod(a,b