bzoj千題計劃323:bzoj1951: [Sdoi2010]古代豬文(Lucas+CRT+尤拉定理)
#include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typedef long long LL; int p[5]; LL mul[5][35618]; LL c[5]; void pre() { p[1]=2; p[2]=3; p[3]=4679; p[4]=35617; for(int i=1;i<=4;++i) { mul[i][0]=1; for(int j=1;j<=35617;++j) mul[i][j]=mul[i][j-1]*j%p[i]; } } LL gcd(LL a,LL b) { return !b ? a : gcd(b,a%b); } LL Pow(LL a,LL b,LL mod) { LL ans=1; for(;b;a=a*a%mod,b>>=1) if(b&1) ans=ans*a%mod;return ans; } LL C(LL n,LL m,int i) { if(m>n) return 0; return mul[i][n]*Pow(mul[i][m],p[i]-2,p[i])%p[i]*Pow(mul[i][n-m],p[i]-2,p[i])%p[i]; } LL Lucas(LL n,LL m,int i) { if(m>n) return 0; LL ans=1; for(;m;n/=p[i],m/=p[i]) ans=(ans*C(n%p[i],m%p[i],i))%p[i]; returnans; } void exgcd(LL a,LL b,LL &x,LL &y) { if(!b) x=1,y=0; else exgcd(b,a%b,y,x),y-=a/b*x; } int main() { pre(); LL n,g; cin>>n>>g; if(gcd(g,mod)!=1) { printf("0"); return 0; } int m=sqrt(n); for(int i=1;i<=m;++i) if(n%i==0) { for(int j=1;j<=4;++j) c[j]=(c[j]+Lucas(n,i,j))%p[j]; if(n/i!=i) for(int j=1;j<=4;++j) c[j]=(c[j]+Lucas(n,n/i,j))%p[j]; } LL ans=0; LL Mi,mi,x,y; for(int i=1;i<=4;++i) { Mi=phi/p[i]; mi=p[i]; exgcd(Mi,mi,x,y); x=(x%mi+mi)%mi; if(!x) x+=mi; ans+=c[i]*Mi*x; } ans=Pow(g,ans,mod); cout<<ans; }
相關推薦
bzoj千題計劃323:bzoj1951: [Sdoi2010]古代豬文(Lucas+CRT+尤拉定理)
#include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typ
bzoj千題計劃317:bzoj4650: [Noi2016]優秀的拆分(字尾陣列+差分)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 30002 using namespace std; int n;
bzoj千題計劃311:bzoj5017: [Snoi2017]炸彈(線段樹優化tarjan構圖)
#include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int mod=1e9+7;
bzoj千題計劃319:bzoj2865: 字串識別(字尾自動機 + 線段樹)
#include<map> #include<cstdio> #include<cstring> #include<algorithm> #define N 500001 using namespace std; char s[
bzoj千題計劃310:bzoj5285: [Hnoi2018]尋寶遊戲(思維題+雜湊)
#include<cstdio> #include<algorithm> #define N 5001 using namespace std; const int mod=1e9+7; int bit[N]; char s[N]; int has
bzoj千題計劃316:bzoj3173: [Tjoi2013]最長上升子序列(二分+樹狀陣列)
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 100001 #define lowbit(x) x&-x
bzoj千題計劃309:bzoj4332: JSOI2012 分零食(分治+FFT)
#include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int M=1<<17; #define N 10001 int m,
bzoj千題計劃321:bzoj5251: [2018多省省隊聯測]劈配(網路流 + 二分)
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d
bzoj千題計劃312:bzoj2119: 股市的預測(字尾陣列+st表)
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d
bzoj千題計劃318:bzoj1396: 識別子串(字尾自動機 + 線段樹)
#include<cstdio> #include<cstring> #include<algorithm> #define N 100001 using namespace std; char s[N]; int ch[N<&
bzoj千題計劃322:bzoj2561: 最小生成樹(最小割)
#include<cstdio> #include<queue> #include<cstring> #include<iostream> #include<algorithm> using namespace std;
bzoj千題計劃324:bzoj5249: [2018多省省隊聯測]IIIDX(線段樹)
#include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int d[N
bzoj千題計劃313:bzoj3879: SvT(字尾陣列+st表+單調棧)
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 #define M 3000001 int n,m,mm;
bzoj千題計劃314:bzoj3238: [Ahoi2013]差異(字尾陣列+st表+單調棧)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int n
bzoj千題計劃320:bzoj4939: [Ynoi2016]掉進兔子洞(莫隊 + bitset)
#include<cmath> #include<cstdio> #include<bitset> #include<cstring> #include<iostream> #include<algorithm> us
bzoj千題計劃308:bzoj4589: Hard Nim(倍增FWT+生成函式)
#include<cstdio> #include<cstring> using namespace std; #define N 50001 const int mod=1e9+7; const int M=1<<16; int inv
bzoj千題計劃315:bzoj3172: [Tjoi2013]單詞(AC自動機)
#include<queue> #include<cstdio> #include<cstring> using namespace std; #define N 2000001 using namespace std; int pos[20
bzoj1951 [Sdoi2010]古代豬文
format 字典 。。 spa 兩個 ati 中國 ans line [Sdoi2010]古代豬文 Time Limit: 1 Sec Memory Limit: 64 MB Description “在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們
BZOJ1951 [Sdoi2010]古代豬文 NOIP數論大雜燴
數據 空格 brush 保留 一個 兩個 以及 tex sub https://www.lydsy.com/JudgeOnline/problem.php?id=1951 Description 豬王國的文明源遠流長,博大精深。 iPig在大肥豬學校圖書館
BZOJ1951: [Sdoi2010]古代豬文
又是一個被卡了很久的題。。 差點就對指數取模了QAQ,然後突然發現有問題。。就傻掉了這該怎麼做。 ans=G∑d|nCdnmodP 根據費馬小定理(G,P)互質,一個數G的P−1次方在模P意義下為1. 那麼ans=G∑d|nCdnmod(P−1)mo