1. 程式人生 > >bzoj千題計劃323:bzoj1951: [Sdoi2010]古代豬文(Lucas+CRT+尤拉定理)

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]; return
ans; } 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計劃323bzoj1951: [Sdoi2010]古代Lucas+CRT+定理

#include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typ

bzoj計劃317bzoj4650: [Noi2016]優秀的拆分字尾陣列+差分

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 30002 using namespace std; int n;

bzoj計劃311bzoj5017: [Snoi2017]炸彈線段樹優化tarjan構圖

#include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int mod=1e9+7;

bzoj計劃319bzoj2865: 字串識別字尾自動機 + 線段樹

#include<map> #include<cstdio> #include<cstring> #include<algorithm> #define N 500001 using namespace std; char s[

bzoj計劃310bzoj5285: [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計劃316bzoj3173: [Tjoi2013]最長上升子序列二分+樹狀陣列

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 100001 #define lowbit(x) x&-x

bzoj計劃309bzoj4332: JSOI2012 分零食分治+FFT

#include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int M=1<<17; #define N 10001 int m,

bzoj計劃321bzoj5251: [2018多省省隊聯測]劈配網路流 + 二分

#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d

bzoj計劃312bzoj2119: 股市的預測字尾陣列+st表

#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #d

bzoj計劃318bzoj1396: 識別子串字尾自動機 + 線段樹

#include<cstdio> #include<cstring> #include<algorithm> #define N 100001 using namespace std; char s[N]; int ch[N<&

bzoj計劃322bzoj2561: 最小生成樹最小割

#include<cstdio> #include<queue> #include<cstring> #include<iostream> #include<algorithm> using namespace std;

bzoj計劃324bzoj5249: [2018多省省隊聯測]IIIDX線段樹

#include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int d[N

bzoj計劃313bzoj3879: SvT字尾陣列+st表+單調棧

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 500001 #define M 3000001 int n,m,mm;

bzoj計劃314bzoj3238: [Ahoi2013]差異字尾陣列+st表+單調棧

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int n

bzoj計劃320bzoj4939: [Ynoi2016]掉進兔子洞莫隊 + bitset

#include<cmath> #include<cstdio> #include<bitset> #include<cstring> #include<iostream> #include<algorithm> us

bzoj計劃308bzoj4589: 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計劃315bzoj3172: [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