UVa10692 Huge Mods
2015-10-19 16:17
357 查看
1.题目描述:点击打开链接
2.解题思路:本题利用欧拉定理解决。根据题意,我们需要递归地计算每一个取模后的指数,然后再进行快速幂得到最终的答案。由欧拉定理知,我们只需要计算指数模phi(MOD)的结果即可,但是有一个细节需要注意,如果gcd(a,MOD)>1,那么需要先计算出a^phi(MOD)%MOD的结果r,那么可以知道,r^k%MOD恒等于r,这样,再把结果乘上r,就是最终的答案。本题即可解决。
3.代码:
2.解题思路:本题利用欧拉定理解决。根据题意,我们需要递归地计算每一个取模后的指数,然后再进行快速幂得到最终的答案。由欧拉定理知,我们只需要计算指数模phi(MOD)的结果即可,但是有一个细节需要注意,如果gcd(a,MOD)>1,那么需要先计算出a^phi(MOD)%MOD的结果r,那么可以知道,r^k%MOD恒等于r,这样,再把结果乘上r,就是最终的答案。本题即可解决。
3.代码:
#include<iostream> #include<algorithm> #include<cassert> #include<string> #include<sstream> #include<set> #include<bitset> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<cctype> #include<complex> #include<functional> #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; #define rep(i,n) for(int i=0;i<(n);i++) #define me(s) memset(s,0,sizeof(s)) #define pb push_back #define lid (id<<1) #define rid (id<<1|1) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> P; const int N=10000+10; int a[15]; int phi ; int MOD; int n; void init() { phi[1]=1; for(int i=2;i<N;i++) if(!phi[i]) for(int j=i;j<N;j+=i) { if(!phi[j])phi[j]=j; phi[j]=phi[j]/i*(i-1); } } int gcd(int a,int b) { return !b?a:gcd(b,a%b); } ll pow_mod(ll a,ll b,int MOD) { ll res=1; while(b>0) { if(b&1)res=res*a%MOD; a=a*a%MOD; b>>=1; } return res; } ll solve(int cur,int MOD) { if(cur==n-1)return a[cur]%MOD; int res=solve(cur+1,phi[MOD]); ll r=1; for(int i=0;i<phi[MOD];i++) //计算a[cur]^phi[MOD]%MOD r=(r*a[cur])%MOD; ll ans=r*pow_mod(a[cur],res,MOD)%MOD; return ans; } int main() { int rnd=0; char str[10]; init(); while(~scanf("%s",str)) { if(str[0]=='#')break; printf("Case #%d: ",++rnd); sscanf(str,"%d",&MOD); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); ll ans=solve(0,MOD); printf("%lld\n",ans); } }
相关文章推荐
- 平面上欧拉定理:poj 2284( LA 3263 ) That Nice Euler Circuit
- HDU 1395(欧拉定理)
- 欧拉定理——小于N的互质数的个数
- HDU6134 Battlestation Operational
- HDU6069 Counting Divisors
- 欧拉定理
- 欧拉定理——PowMod ( HDU 5728 )(2016 Multi-University Training Contest 1 1006)
- 欧拉函数——找新朋友(HDU 1286)
- HDU-5895 Mathematician QSC
- 欧拉定理 费马小定理
- uva1342 That Nice Euler Circuit
- UVa10692,Huge Mod,数论,欧拉定理,指数循环节
- BZOJ 3884 上帝与集合的正确用法
- SUM 大数取余 欧拉定理 二项展开 数论
- Codeforces Beta Round #17 D. Notepad
- 欧拉定理与费马小定理
- MIT18.06线性代数课程笔记12:使用邻接矩阵证明欧拉定理
- 【BZOJ 4869】【2017六省联考】相逢是问候
- 【BZOJ 3884】上帝与集合的正确用法【欧拉定理】&【剧毒题】
- 数论基础知识与定理