Codeforces 906D:Power Tower-扩展欧拉定理
2018-02-04 14:59
489 查看
传送门
但是稍有一点不同:
根据扩展欧拉定理:
ab≡⎧⎩⎨⎪⎪ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)ab≡{ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)
在BZOJ3884中,次方是无限的,所以说指数一定大于φ(p)
但是这道题中指数不一定大于φ(p)
代码中特判一下即可
代码:
题意:
给你n个数w和一个数p,q个询问,每次询问一个区间[l,r],求w_l^{(w_{l+1}^{(w_{l+2}…^{w_r})})}\mod pSolution:
这道题类似于BZOJ3884但是稍有一点不同:
根据扩展欧拉定理:
ab≡⎧⎩⎨⎪⎪ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)ab≡{ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)
在BZOJ3884中,次方是无限的,所以说指数一定大于φ(p)
但是这道题中指数不一定大于φ(p)
代码中特判一下即可
代码:
#include<cstdio> #include<iostream> using namespace std; int n,m; int w[100010]; int q; int st[10010],cnt; int l,r; int fast_pow(int a,int x,int mod) { int ans=1; for (;x;x>>=1,a=1ll*a*a>=mod?1ll*a*a%mod+mod:1ll*a*a%mod) if (x&1) ans=1ll*a*ans>=mod?1ll*a*ans%mod+mod:1ll*a*ans%mod; return ans; } int get(int x) { int res=x; for (int i=2;i*i<=x;i++) { if (x%i==0) { res-=res/i; while (x%i==0) x/=i; } } if (x>1) res-=res/x; return res; } int dfs(int l,int tim) { if (st[tim]==1) return 1; if (l==r) return w[l]<st[tim]?w[l]:w[l]%st[tim]+st[tim]; return fast_pow(w[l],dfs(l+1,tim+1),st[tim]); } void dfsg(int m) { st[++cnt]=m; if (m==1) return; dfsg(get(m)); } int main() { scanf("%d%d",&n,&m); dfsg(m); for (int i=1;i<=n;i++) scanf("%d",&w[i]); scanf("%d",&q); for (int i=1;i<=q;i++) { scanf("%d%d",&l,&r); printf("%d\n",dfs(l,1)%m); } }
相关文章推荐
- 【CodeForces】906 D. Power Tower 扩展欧拉定理
- Codeforces 906 D. Power Tower
- codeforces Strings of Power
- 使用 Productivity Power Tools 高级扩展 来帮助你提高 VS2012 的工作效率
- codeforces 787A The Monster 扩展欧几里德 Java
- UVa 10692 - Huge Mod (数论 + 欧拉定理扩展)
- BZOJ4869 [Shoi2017]相逢是问候 【扩展欧拉定理 + 线段树】
- codeforces 225B(Well-known Numbers) 扩展斐波那契数列 Java
- codeforces 392 B. Tower of Hanoi(汉诺塔 DP)
- codeforces 680D D. Bear and Tower of Cubes(dfs+贪心)
- Productivity Power Tools,对于Visual Studio 2017的15个扩展
- codeforces 680D D. Bear and Tower of Cubes(dfs+贪心)
- Power 是模块化的可扩展服务器与刀片
- VS扩展:标签左置 — productivity power tools
- Productivity Power Tools 是微软官方推出的 Visual Studio 扩展
- Insomnia cure CodeForces - 148A (数论的扩展解法)
- CodeForces 10A - Power Consumption Calculation
- codeforces 7C Line 扩展欧几里德 Java
- CodeForces 787A A. The Monster(扩展欧几里得)
- BZOJ 1951 [Sdoi2010]古代猪文 欧拉定理+(扩展)lucas定理+逆元+快速幂