POJ1995 Raising Modulo Numbers【整数快速幂】

题目链接:

http://poj.org/problem?id=1995

题目大意:

N个人在一起玩游戏,每个人默写两个数字Ai、Bi,在同一个时间公开给其他玩家看。游戏的目的是

为了看谁能够在最快的时间求出所有的Ai^Bi的和对M取模的值。那么问题来了:你能够快速算出

(A1B1+A2B2+ ... +AHBH)mod M 的值吗?

思路:

用二分整数快速幂算法计算出每一个Ai^Bi,然后依次相加取模。

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define LL __int64
using namespace std;

LL QuickMod(LL a,LL b,LL m)
{
    LL ans = 1;
    while(b)
    {
        if(b&1)
        {
            ans = ans*a%m;
            b--;
        }
        a = a*a%m;
        b >>= 1;
    }
    return ans;
}

int main()
{
    int N,M,T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&M,&N);
        LL a,b,ans = 0;
        for(int i = 1; i <= N; ++i)
        {
            scanf("%I64d%I64d",&a,&b);
            ans = (ans + QuickMod(a,b,M)) % M;
        }
        printf("%I64d\n",ans);
    }

    return 0;
}
时间: 2024-10-12 13:31:30

POJ1995 Raising Modulo Numbers【整数快速幂】的相关文章

poj1995 Raising Modulo Numbers (快速幂,挑战有模版,纪念一下A的第一道快速幂)

/*快速幂,时间复杂度,数据范围*/ #include <iostream> #include <stdio.h> #include <string.h> using namespace std; long long a, b; int n, m; int sum, res; typedef long long ll; ll mod_pow(ll x, ll y, int z) { res = 1; while(y > 0){ if(y & 1) res

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

poj1995 Raising Modulo Numbers【高速幂】

Raising Modulo Numbers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5500   Accepted: 3185 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 二分快速幂

题意:给定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

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 (快速幂取余)

#include<iostream> using namespace std; int quick_mod(int a,int b,int m) //模板 { a=a%m; int ans=1; while(b) { if(b&1) { ans=(ans*a)%m; } b>>=1; a=(a*a)%m; } return ans; } int main() { int size; cin>>size; int m, h, a, b; while(cin>

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> #

POJ1995 Raising Modulo Numbers

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

HDU 2817 A sequence of numbers 整数快速幂

A sequence of numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4550    Accepted Submission(s): 1444 Problem Description Xinlv wrote some sequences on the paper a long time ago, they might