• 【题解】POJ 1995 Raising Modulo Numbers


    Raising Modulo Numbers

    题目传送门

    (以下由DeepL翻译)

    说明

    人是不同的。有的人偷偷地看杂志,里面全是有趣的女孩的照片,有的人在地窖里制造原子弹,
    有的人喜欢使用Windows,有的人喜欢高难度的数学游戏。
    最新的市场调查显示,这个细分市场至今被低估,缺乏这类游戏。因此,这种游戏被纳入了KOKODáKH。
    游戏规则如下:
    每个玩家选择两个数字Ai和Bi 然后把它们写在纸条上. 其他人不能看到这些数字。
    在特定的时刻,所有的玩家向其他人展示他们的数字。目标是确定包括自己在内的所有玩家的所有表达式${Ai}^{Bi}$的总和,
    并确定除以给定数字M后的剩余部分。根据选手的经验,可以选择更高的数字来增加难度。
    
    你应该编写一个计算结果的程序,并能够找出谁赢得了游戏。
    

    输入

    输入由Z个赋值组成。它们的数量由输入的第一行出现的单个正整数Z给出。
    然后是赋值。每个赋值以包含整数M的行开始(1 <= M <= 45000)。
    总数将被除以这个数字。下一行包含玩家数量H (1 <= H <= 45000)。
    接下来正好是H行。在每一行中,有两个数字Ai和Bi用空格隔开。两个数字不能同时等于零。
    (看不下去了qwq,意思就是先是 T组数据 ,然后 取余的数M, 然后 H个玩家, 在是Ai,Bi)
    

    输出

    对于每一个语句,只有一行输出。在这一行中,有一个数字,是表达式的结果。
    

    [({A1}^{B1}+{A2}^{B2}+...+{AH}^{BH})mod M ]

    采样输入

    3
    16
    4
    2 3
    3 4
    4 5
    5 6
    36123
    1
    2374859 3029382
    17
    1
    3 18132
    

    采样输出

    2
    13195
    13
    

    资料来源

    1999年CTU公开赛
    

    思路分析:

    就没什么好说的。直接套快速幂。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    typedef long long ll; typedef unsigned long long ull;
    
    int T;
    ll a, b, p, n, ans;
    
    inline int qpm(ll a, ll b, ll p) {
        ll ans = 1 % p, t = a % p;
        while(b) {
            if(b & 1) ans = ans * t % p;
            t = t * t % p;
            b >>= 1;
        }
        return ans;
    }
    
    int main(){
        scanf("%d", &T);
    	while(T --) {
    		ans = 0;
    		scanf("%lld%lld", &p, &n);
    		for(int i = 0; i < n; i ++) {
    			scanf("%lld%lld", &a, &b);
    			ans = (ans+qpm(a, b, p)) % p;
    		}
    		printf("%lld
    ", ans);
    	}
        return 0;
    }
    
  • 相关阅读:
    vue安装过程
    es6 Array数组方法
    初始化 CSS 样式
    css新增伪类
    常浏览器兼容性问题与解决方案
    CSS3高级
    php总结
    php环境和使用方法
    [书籍介绍] Python网络数据采集_PDF电子书下载 高清 带索引书签目录_(美)Ryan Mitchell著_北京
    深度学习与计算机视觉应用实战课程
  • 原文地址:https://www.cnblogs.com/RemnantDreammm/p/14125863.html
Copyright © 2020-2023  润新知