HDU5728 2016 Multi-University Training Contest 1 (递归+欧拉函数)
2016-07-23 13:44
483 查看
/*265秒跑出来的,调了一下午,时间再调不短了。。。
这个推公式就好,看看欧拉函数积性公式,再试着推几下就出来啦。*/
#include<iostream> #include<cstdio> #define ll long long using namespace std; const int mod=1e9+7; const int maxn=1e7+5; ll sumphi[maxn]; int prime[maxn],phi[maxn]; bool vis[maxn]; int cnt,a[maxn],rear; void init(){ sumphi[1]=phi[1]=1; cnt=0; for(int i=2;i<maxn;i++){ if(!vis[i]){phi[i]=i-1;prime[cnt++]=i;} for(int j=0;j<cnt;j++){ if(i*prime[j]>=maxn)break; vis[i*prime[j]]=true; if(i%prime[j]==0){ phi[i*prime[j]]=phi[i]*prime[j];break; }else{ phi[i*prime[j]]=phi[i]*(prime[j]-1); } } sumphi[i]=(sumphi[i-1]+phi[i])%mod; } } void resolve(int n) { for(int i=0;i<cnt;i++) { if(!vis ) {a[rear++]=n;break;} if(n%prime[i]==0) { if(n==0) return; a[rear++]=prime[i]; n/=prime[i]; } } } ll solve(int n,int m,int res) { if(n==1) return sumphi[m]; if(m==1) return phi ; if(m<1) return 0; return ((a[res]-1)*solve(n/a[res],m,res-1)%mod+solve(n,m/a[res],res)%mod)%mod; } ll pow(ll a,ll b,int p){ ll ret=1; a%=p; while(b) { if(b&1) ret=(ret*a)%p; a=(a*a)%p; b/=2; } return ret; } ll f(ll k,int p) { if(p==1) return 0; ll tmp=f(k,phi[p]); return pow(k,tmp+phi[p],p); } int main() { init(); ll p,n,m; while(scanf("%d%d%d",&n,&m,&p)!=EOF) { rear=0; resolve(n); ll k=solve(n,m,rear-1); printf("%lld\n",f(k,p)); } return 0; }
相关文章推荐
- http://blog.csdn.net/mindfloating/article/details/51534289
- UVA 11076-Add Again
- soft raid5阅读笔记之十四--resync和recovery的区别
- soft raid5阅读笔记之十三--异或操作
- soft raid5阅读笔记之十二--DMA相关
- 5. Longest Palindromic Substring && 214. Shortest Palindrome && 336. Palindrome Pairs
- soft raid5阅读笔记之十--状态标志
- soft raid5阅读笔记之九--MD中的superblock
- 373. Find K Pairs with Smallest Sums && 378. Kth Smallest Element in a Sorted Matrix
- soft raid5阅读笔记之七--MD中的bitmap
- maven install时报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile
- Contains Duplicate
- POJ:1995 Raising Modulo Numbers(快速幂)
- 2016 Multi-University Training Contest 2 1006 Fantasia (hdu5739) 【割点 无向图dfs树 树形dp】
- 2016 Multi-university-training-contests-2 1006 点双连通分量
- 在QMainWindow添加控件,无法显示问题
- error: Setup script exited with error: command 'gcc' failed with exit status 1
- E - Doing Homework again hd 1789
- @tailrec注解与“蹦床”机制
- 一颗可靠的时间胶囊:苹果AirPort Time Capsule测评