Codeforces 906D Power Tower(欧拉函数 + 欧拉公式)
2024-09-08 12:37:37
题目链接 Power Tower
题意 给定一个序列,每次给定$l, r$
求$w_{l}^{w_{l+1}^{w_{l+2}^{...^{w_{r}}}}}$ 对m取模的值
根据这个公式
每次递归计算。
因为欧拉函数不断迭代,下降到$1$的级别大概是$log(m)$的,那么对于每一次询问最多需要递归$log(m)$次
注意每次求解欧拉函数的时候要用map存下来,方便以后查询
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 1e5 + 10; int n, q;
LL a[N];
LL m;
map <LL, LL> f; LL phi(LL n){
if (f.count(n)) return f[n];
LL ans = n, z = n;
for (LL i = 2; i * i <= n; ++i){
if (n % i == 0){
ans -= ans / i;
while (n % i == 0) n /= i;
}
} if (n > 1) ans -= ans / n;
return f[z] = ans;
} LL Pow(LL a, LL b, LL mod){
LL ret = 1;
LL fl = a >= mod;
for (; b; b >>= 1){
if (b & 1){
ret *= a;
if (ret >= mod) fl = 1, ret %= mod;
} a *= a;
if (a >= mod) a %= mod, fl = 1;
} return ret + fl * mod;
} LL solve(int l, int r, LL mod){
if (l == r) return a[l];
if (mod == 1) return 1;
return Pow(a[l], solve(l + 1, r, phi(mod)), mod);
} int main(){ scanf("%d%lld", &n, &m);
rep(i, 1, n) scanf("%lld", a + i); scanf("%d", &q);
while (q--){
int x, y;
scanf("%d%d", &x, &y);
printf("%lld\n", solve(x, y, m) % m);
} return 0;
}
最新文章
- 基于SSM的租赁管理系统0.3_20161225_数据库设计
- Java 高精度数字
- yii和wp做博客
- win8 IIS
- 重新想象 Windows 8.1 Store Apps (84) - 图像处理的新特性, Share Contract 的新特性
- (Struts)ActionForm类及表单数据验证
- Visual Studio 2010 单元测试
- CleanAOP实战系列--WPF中MVVM自动更新
- Percona Xtrabackup备份mysql(转)
- Chapter 4. Using the Gradle Command-Line 使用gradle命令行
- AJAX 表单提交 文件上传
- 六:Ioc和AOP使用拓展
- logback日志模板
- C++——list中erase和remove的区别
- (后端)异常不仅仅是try/catch
- Python中Gradient Boosting Machine(GBM)调参方法详解
- 3.C#知识点:is和as
- js省市级联实现
- 内存管理 初始化(八) 至kswapd_init
- 数据库 -- Oracle常用命令
热门文章
- WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决
- C#编程:正则表达式验证身份证校验码-10
- luogu2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
- tomcat内存泄漏存入dump文件
- Careercup - Microsoft面试题 - 24313662
- 从零开始到设计Python+Selenium自动化测试框架-如何开始
- Vue+Django REST framework打造生鲜电商项目
- springcloud 高可用分布式配置中心
- maven学习(十)——maven生命周期以及插件
- PAT1023