题解:艾米利亚的魔法
来源:互联网 发布:百度网盘搜索 知乎 编辑:程序博客网 时间:2024/04/20 21:40
题目:http://cojs.tk/cogs/problem/problem.php?pid=2430
题解:
对于这道题可能有很多种做法,欢迎大家艹过去,可以用我标程写的降幂大法。
注意费马小定理必须在模数是质数的情况下。所以要用降幂大法,一个比较直观的式子就是
所以直接用这个方法就可以做了,还有一件事,那就是我们发现里面必须要用到组合数取摸,所以然而phi(p)=27092310,是个合数,如果直接组合数取摸的话,会跪(具体会跪倒什么程度我不太清楚,而且也没有试),所以要用到中国剩余定理,总而言之,这是一道比较综合的题
代码如下
#include <cstdio>#include <cmath>using namespace std;typedef long long ll;const int mod = 54184622,MAXN = 1000005;ll N,G,Index,MM;ll pri[5]={2,3,5,7,129011};ll A[5],M[5],K[5],fact[5][MAXN],Inv[5][MAXN];inline ll gcd(ll a,ll b){return b == 0 ? a:gcd(b,a%b);}ll phi(ll x){ll res=x,k=sqrt(x);for(int i=2;i<k;++i){if(x % i==0){res-=res/i;while(x%i==0)x/=i;}if(x<=1)break;}if(x>1) res -= res / x;return res;}inline ll pow(ll a,ll t,ll p){ll ret = 1;for(;t;a=(a*a)%p,t>>=1) if(t&1) ret = (ret*a)%p;return ret;}ll C(ll n,ll m,ll p,int i){if(m > n) return 0;return ( (fact[i][n]*Inv[i][m]) % p*Inv[i][n-m]) % p;}ll Lucas(ll n,ll m,ll p,int i){if(m == 0) return 1;return C(n % p,m % p,p,i)*Lucas(n/p,m/p,p,i) % p;}ll China(ll n,ll m){if(m > n)return 0;ll res = 0;for(int i = 0;i < 5; ++i)A[i]=Lucas(n,m,pri[i],i);for(int i = 0;i < 5; ++i)res = (res+A[i]*M[i]*K[i])%MM;return res;}void Pre(){for(int i=0;i<5;++i){fact[i][0] = 1;for(int j=1;j<=1000000;++j) fact[i][j] = (fact[i][j-1]*j)%pri[i];for(int j=0;j<=1000000;++j) Inv[i][j] = pow(fact[i][j],pri[i]-2,pri[i]);}}int main(){freopen("aimiliyademagic.in","r",stdin);freopen("aimiliyademagic.out","w",stdout);Pre();scanf("%lld%lld",&N,&G);ll p = phi(mod); MM = p;for(int i=0;i<5;++i) M[i] = MM/pri[i];for(int i=0;i<5;++i) K[i] = pow(M[i],pri[i]-2,pri[i]);for(int i=1;i<=N;++i){if( gcd(i,N) == 1){Index += China(G,i);Index %= p;}}printf("%lld\n",pow(N,Index+p,mod));fclose(stdin);fclose(stdout);return 0;}
0 0
- 题解:艾米利亚的魔法
- 【BZOJ】【P3343】【教主的魔法】【题解】【分块】
- NOI2014魔法森林题解
- 魔法阵题解
- [题解]bzoj3669(NOI2014)魔法森林
- EOJ 3256 拼音魔法 题解
- NOI2014魔法森林题解报告
- 【BZOJ】【P1197】【HNOI2006】【花仙子的魔法】【题解】【DP】【庆祝月考结束】
- 拓展lucas [HZOI 2016]艾米利亚的魔法
- 【BZOJ】【P3669】【NOI2014】【魔法森林】【题解】【LCT】
- NOIP2016普及组[魔法阵]题解
- Python魔法方法--基本的魔法方法
- 题解:艾米利亚的求助
- 题解:艾米利亚的施法
- 恩很帅的魔法阵
- Asakura的魔法世界
- boj1074_Candy的魔法
- 3343: 教主的魔法
- 基于jQuery+JSON的省市联动效果,详细的描述
- cycript
- POJ 3321 Apple Tree
- Hibernate的inverse,cascade属性简单介绍
- Red5的安装与测试
- 题解:艾米利亚的魔法
- java中重写与重载的区别
- 大数与小数模板(乘法,加法)
- android 进程间通信
- TOJ 3534.Shift Number
- 华为OJ——字符串加密
- Codeforces Round #364 vp
- C++笔记(一):概念
- 刚刚犯了个错误,关于div定位的。