luogu P2480 [SDOI2010]古代猪文

M_sea:这道题你分析完后就是一堆板子

废话

理解完题意后,我们要求的东西是\(G^s(s=\sum_{d|n} \binom{n}{d})\)

但是这个指数\(s\)算出来非常大,,,

我们可以利用费马小定理 \(a^{(p-1)}\equiv1(mod\ p)(gcd(a,p)=1)\)

由此我们可以得到\(G^s \equiv G^{s\ mod\ (p-1)}(mod\ p)\)

组合数部分可以使用\(Lucas\)定理求解

但是,本题的\(mod-1\)不是一个质数,它可以质因数分解为\(2*3*4679*35617\)(分别记为\(p_1\ p_2\ p_3\ p_4\))

所以,我们可以对这四个质因子分别算一遍\(s\),记第\(i\)个质因子算出来的\(s\)为\(s_i\)

我们可以知道\[s\equiv s_1(mod\ p_1)\]\[s\equiv s_2(mod\ p_2)\]\[s\equiv s_3(mod\ p_3)\]\[s\equiv s_4(mod\ p_4)\]

直接上\(CRT\)(中国剩余腚♂理)即可求出\(s\)

求大佬优化常数,luogu开O2跑380ms,倒数qwq

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register

using namespace std;
const LL md=999911659;
const int _=1000000+10,N=4000000+10;
il LL rd()
{
    re LL x=0,w=1;re char ch;
    while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return x*w;
}
int n,g;
LL jc[36010][4],cj[36010][4],cc[4];
LL p[4]={2,3,4679,35617},prm[1010][2],tt;
il LL ksm(LL a,LL b,LL mod)
{
  LL an=1;
  while(b)
    {
      if(b&1) an=(an*a)%mod;
      a=(a*a)%mod;
      b>>=1;
    }
  return an;
}
il void init()
{
  for(re int j=0;j<4;j++) jc[0][j]=cj[0][j]=1;
  for(re int i=1;i<=36000;i++)
    for(re int j=0;j<4;j++)
      jc[i][j]=(jc[i-1][j]*i)%p[j],cj[i][j]=ksm(jc[i][j],p[j]-2,p[j]);
  int nn=n,sqt=sqrt(n);
  for(re int i=2;i<=sqt&&nn;i++)
    {
      if(nn%i!=0) continue;
      prm[++tt][0]=i;
      while(nn%i==0) nn/=i,++prm[tt][1];
    }
  if(nn>1) ++prm[++tt][0]=nn,prm[tt][1]=1;
}
il LL C(int nn,int mm,int q)
{
  if(nn<mm) return 0;
  if(nn<p[q]) return ((jc[nn][q]*cj[mm][q])%p[q]*cj[nn-mm][q])%p[q];
  return (C(nn/p[q],mm/p[q],q)*C(nn%p[q],mm%p[q],q))%p[q];
}
il void work(int o,int s)   //算每个质因子的贡献
{
  if(o>tt)
    {
      for(re int j=0;j<4;j++)
        cc[j]=(cc[j]+C(n,s,j))%p[j];
      return;
    }
  for(re int i=0;i<=prm[o][1];i++)
    {
      work(o+1,s);
      s*=prm[o][0];
    }
}
il void exgcd(LL a,LL b,LL &x,LL &y)
{
  if(b==0){x=1,y=0;return;}
  exgcd(b,a%b,y,x);
  y-=a/b*x;
}
il LL CRT()
{
  LL a,b,c,a1,b1,a2,b2,x,y;
  a1=p[0],b1=cc[0];
  for(re int j=1;j<4;j++)
    {
      a2=p[j],b2=cc[j];
      a=a1,b=a2,c=b2-b1;
      exgcd(a,b,x,y);
      x=((x*c)%b+b)%b;
      b1=b1+x*a1,a1=a1*a2;
    }
  return b1;
}

int main()
{
  n=rd(),g=rd();
  if(g==md) {putchar(48);return 0;}
  init();
  work(1,1);
  printf("%lld\n",ksm(g,CRT(),md));
  return 0;
}

原文地址:https://www.cnblogs.com/smyjr/p/9463999.html

时间: 2024-08-30 07:09:30

luogu P2480 [SDOI2010]古代猪文的相关文章

Luogu P2480 [SDOI2010]古代猪文 卢卡斯+组合+CRT

好吧刚开始以为扩展卢卡斯然后就往上套..结果奇奇怪怪又WA又T...后来才意识到它的因子都是质数...qwq怕不是这就是学知识学傻了.. 题意:$ G^{\Sigma_{d|n} \space C_n^d}\space mod \space 999911659$ 首先发现999911659是个质数,所以根据欧拉定理的推论有 $ G^{\Sigma_{d|n}\space C_n^d} \equiv G^{\Sigma_{d|n}\space C_n^d\space mod \space\phi(

P2480 [SDOI2010]古代猪文

P2480 [SDOI2010]古代猪文 题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔

P2480 [SDOI2010]古代猪文 Lucas+CRT合并

\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会很大.当时的猪王国国王考虑到如果修一本字典,规模有可能远远超过康熙字典,花费的猪力.物力将难以估量.故考虑再三没有进行这一项劳猪伤财之举.当然,猪王国的文字后来随着历史变迁逐渐进行了简化,去掉了一些不常用的字. iPig打算研究古时某个朝代的猪文文字.根据相关文献记载,那个朝代流传的猪文文字恰好为远

洛谷P2480 [SDOI2010]古代猪文

要求(图是盗来的QAQ) 首先用欧拉定理把幂模一下,直接就是MOD-1了 然后发现MOD-1可以分解为2,3,4679,35617,都是质数,可以直接用Lucas定理 然后用中国剩余定理合并一下即可 千万不可把MOD和MOD-1搞混了,否则调试好麻烦的 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<vector>

1951: [Sdoi2010]古代猪文

1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2171  Solved: 904[Submit][Status][Discuss] Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时

[bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃

bzoj 1951 [Sdoi2010]古代猪文(数论知识)

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪

【BZOJ 1951】 [Sdoi2010]古代猪文

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪

[BZOJ 1951][Sdoi2010]古代猪文(Lucas+CRT+费马小定理)

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪