2019南京网络赛 B super_log —— 幂塔函数 广义欧拉降幂

2023-11-02 10:48

本文主要是介绍2019南京网络赛 B super_log —— 幂塔函数 广义欧拉降幂,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:点我啊╭(╯^╰)╮

题目大意:

    求 a a . . . a m o d a^{a^{...^a}} mod aa...amod m m m,共 b b b a a a

解题思路:

    在这里插入图片描述

    注意对于指数取模的时候
    要判断计算指数会不会超过模数
    所以在快速幂里修改一下取模操作即可

     P S : PS: PS 对于 g c d ( a , p ) = 1 gcd(a,p) = 1 gcd(a,p)=1 的情况可以直接套用广义定理

核心:欧拉降幂的运用

#include<bits/stdc++.h>
#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
using namespace std;
typedef long long ll;
using pii = pair <ll, ll>;
const int maxn = 1e6 + 10;
int T;ll phi[maxn];
inline void phi_table(ll n) {	//计算1到n的欧拉函数值for(ll i = 2; i <= n; i++) phi[i] = 0;phi[1] = 1;for(ll i = 2; i <= n; i++) {if(!phi[i]) {for(ll j = i; j <= n; j+=i) {if(!phi[j]) phi[j] = j;phi[j] = phi[j] / i * (i - 1);}}}
}ll qpow(ll a, ll b, ll p) {ll ret = 1;while(b) {if(b & 1) ret = ret * a;ret = ret < p ? ret : (ret % p + p);a = a * a;a = a < p ? a : (a % p + p);b >>= 1;}return ret;
}ll dfs(ll k, ll m, ll a){if(m == 1) return 1;if(k == 0) return 1;ll exp = dfs(k-1, phi[m], a);return qpow(a, exp, m);
}int main() {ll a, b, m;scanf("%d", &T);phi_table(1e6 + 5);while(T--) {scanf("%lld%lld%lld", &a, &b, &m);if(m == 1) puts("0");else if(b == 0) puts("1");else if(b == 1) printf("%lld\n", a % m);else {ll ans = dfs(b, m, a);printf("%lld\n", ans % m);}}
}

这篇关于2019南京网络赛 B super_log —— 幂塔函数 广义欧拉降幂的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330078

相关文章

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

使用@Slf4j注解,log.info()无法使用问题

《使用@Slf4j注解,log.info()无法使用问题》在使用Lombok的@Slf4j注解打印日志时遇到问题,通过降低Lombok版本(从1.18.x降至1.16.10)解决了问题... 目录@Slf4androidj注解,log.info()无法使用问题最后解决总结@Slf4j注解,log.info(

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码