Power Tower

CodeForces - 906D

题目大意:有N个数字,然后给你q个区间,要你求每一个区间中所有的数字从左到右依次垒起来的次方的幂对m取模之后的数字是多少。

用到一个新知识,欧拉降幂定理

记住公式 $\LARGE n^x \equiv n^{\varphi(m)\ +\ x\ mod\ \varphi(m)}(mod\ m)​$这个式子当且仅当x>φ(m)时满足。那么就可以递归求解了。

暂时不太明白怎么证明

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define maxn 100010
#define Mod(a,b) a<b?a:a%b+b
using namespace std;
long long n,m,a[maxn];
map<long long,long long>p;
long long qread(){
long long i=,j=;
char ch=getchar();
while(ch<''||ch>''){if(ch=='-')j=-;ch=getchar();}
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i*j;
}
long long Pow(long long x,long long y,long long mod){
long long res=;
while(y){
if(y&)res=Mod(res*x,mod);
x=Mod(x*x,mod);
y>>=;
}
return res;
}
long long phi(long long k){
long long s=k,x=k;
if(p[k])return p[k];
for(long long i=;i*i<=k;i++){
if(k%i==)s=s/i*(i-);
while(k%i==)k/=i;
}
if(k>)s=s/k*(k-);
p[x]=s;return s;
}
long long solve(int l,int r,long long mod){
if(l==r||mod==)return Mod(a[l],mod);
return Pow(a[l],solve(l+,r,phi(mod)),mod);
}
int main(){
freopen("Cola.txt","r",stdin);
n=qread();m=qread();
for(int i=;i<=n;i++)a[i]=qread();
int Q;scanf("%d",&Q);
int l,r;
while(Q--){
scanf("%d%d",&l,&r);
cout<<solve(l,r,m)%m<<endl;
}
return ;
}



CodeForces - 906D Power Tower(欧拉降幂定理)的更多相关文章

  1. Codeforces Round #454 (Div. 1) CodeForces 906D Power Tower (欧拉降幂)

    题目链接:http://codeforces.com/contest/906/problem/D 题目大意:给定n个整数w[1],w[2],……,w[n],和一个数m,然后有q个询问,每个询问给出一个 ...

  2. D - Power Tower欧拉降幂公式

    题意:给你一个数组a,q次查询,每次l,r,要求 \(a_{l}^{a_{l+1}}^{a_{l+2}}...{a_r}\) 题解:由欧拉降幂可知,最多log次eu(m)肯定变1,那么直接暴力即可,还 ...

  3. [数学][欧拉降幂定理]Exponial

    Exponial 题目 http://exam.upc.edu.cn/problem.php?cid=1512&pid=4 欧拉降幂定理:当b>phi(p)时,有a^b%p = a^(b ...

  4. Codeforces 906D Power Tower(欧拉函数 + 欧拉公式)

    题目链接  Power Tower 题意  给定一个序列,每次给定$l, r$ 求$w_{l}^{w_{l+1}^{w_{l+2}^{...^{w_{r}}}}}$  对m取模的值 根据这个公式 每次 ...

  5. [Codeforces]906D Power Tower

    虽说是一道裸题,但还是让小C学到了一点姿势的. Description 给定一个长度为n的数组w,模数m和询问次数q,每次询问给定l,r,求: 对m取模的值. Input 第一行两个整数n,m,表示数 ...

  6. [CodeForces - 906D] Power Tower——扩展欧拉定理

    题意 给你 $n$ 个 $w_i$ 和一个数 $p$,$q$个询问,每次询问一个区间 $[l,r] $,求 $w_l ^{w_{l+1}^{{\vdots}^{w_r}}} \ \% p$ 分析 由扩 ...

  7. Codeforces Round #454 D. Power Tower (广义欧拉降幂)

    D. Power Tower time limit per test 4.5 seconds memory limit per test 256 megabytes input standard in ...

  8. Power Tower(广义欧拉降幂)

    题意:https://codeforc.es/contest/906/problem/D 计算区间的: ai ^ ai+1 ^ ai+2.......ar . 思路: 广义欧拉降幂: 注意是自下而上递 ...

  9. Codeforces Round #536 (Div. 2) F 矩阵快速幂 + bsgs(新坑) + exgcd(新坑) + 欧拉降幂

    https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k} ...

随机推荐

  1. 高并发下用pdo,文件排它锁,redis三种方法对比

    <?php header('content-type:text/html;charset=utf-8');                 // //无控制     // $DB_DSN = ' ...

  2. scanf ---------未完待续

    1.不可读入空格 #include<iostream> #include<stdio.h> using namespace std; int main() { char c[5 ...

  3. 第二章 python基础(一)

    第一节 Python文件类型 源代码 Python源代码的文件以“py”为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 im ...

  4. Java丨JDK与JRE

    小编是以为热爱Java的程序员,可是在我身边的一部分人他们不知道JDK和JRE是什么,有什么区别! 今天小编以个人的理解来说一说,不足之处还望大家指证. 首先我们来看看JDK和JRE他们两个的英文意思 ...

  5. codeforces 29D Ant on the Tree (dfs,tree,最近公共祖先)

    D. Ant on the Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. codeforces 633A A. Ebony and Ivory(暴力)

    A. Ebony and Ivory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. 【leetcode刷题笔记】Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  8. 输入框input内容变化与onpropertychange事件的兼容

    一.输入框常用的几个事件 onblur 元素失去焦点. onchange 域的内容被改变. onclick 当用户点击某个对象时调用的事件句柄. ondblclick 当用户双击某个对象时调用的事件句 ...

  9. 【LeetCode】085. Maximal Rectangle

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's ...

  10. JUI web企业应用框架 http://jui.org/

    官方网址: http://jui.org/ 这是一个很好的开发控件