题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951

数学综合题。

费马小定理得指数可以%999911658,又发现这个数可以质因数分解。所以分解做完再用中国剩余定理合并。

为什么不能预处理阶乘的逆元?

为什么正常的中国剩余定理会T?非得两两合并?

  而且两两合并里的 a0+=m0*x 不太明白。

  PS:现在明白了。新的a是a=a1+m1*x1=a2+m2*x2,a的通解是a1加上任意倍的m1*x1。

需要特判!那些C( )、lucas( )里的判断也要注意。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll m[5]={999911658,2,3,4679,35617};//ll
ll n,g,ans,x,y,a[5],jc[5][35620],jcn[5][35620],M[5];
ll pw(ll x,ll k,ll mod)
{ll ret=1;while(k){if(k&1)(ret*=x)%=mod;(x*=x)%=mod;k>>=1;}return ret;
}
void init()
{for(int u=1;u<=4;u++)M[u]=m[0]/m[u];for(int u=1;u<=4;u++){jc[u][0]=1;for(int i=1;i<m[u];i++)jc[u][i]=jc[u][i-1]*i%m[u];
//      jcn[u][m[u]-1]=pw(jc[u][m[u]-1],m[u]-2,u);        //为什么不能预处理阶乘的逆元?
//      for(int i=m[u]-2;i;i--)jcn[u][i]=(jcn[u][i+1]*(i+1))%m[u];
    }
}
ll C(ll i,ll j,int type)
{if(i<j)return 0;    //
  return jc[type][i]*pw(jc[type][j]*jc[type][i-j],m[type]-2,m[type])%m[type];    //
//  if(!j)return 1;
//  return jc[type][i]*jcn[type][j]%m[type]*jcn[type][i-j]%m[type];
}
ll lucas(ll i,ll j,int type)
{if(!j||!i)return 1;    //
  if(i<m[type]&&j<m[type])return C(i,j,type);return lucas(i/m[type],j/m[type],type)*C(i%m[type],j%m[type],type)%m[type];
}
void exgcd(ll a,ll b)
{if(!b){x=1;y=0;return;}exgcd(b,a%b);ll tp=x;x=y;y=tp-a/b*y;
}
int main()
{init();scanf("%lld%lld",&n,&g);if(g==m[0]+1){printf("0");return 0;}    //必须判这个! for(int i=1;i*i<=n;i++) if(n%i==0)    //
    for(int j=1;j<=4;j++){(a[j]+=lucas(n,i,j))%=m[j];if(i*i!=n)(a[j]+=lucas(n,n/i,j))%=m[j];}
//  ll mod=m[0];            //用中国剩余定理合并:会TLE
//  for(int i=1;i<=4;i++)
//    {
//      exgcd(M[i],m[i]);
//      (ans+=M[i]*x%mod*a[i]%mod)%=mod;
//    }
//  printf("%lld\n",pw(g,ans,mod+1));ll m0=m[1],a0=a[1];        //两个两个地合并 for(int i=2;i<=4;i++){exgcd(m0,m[i]);x=(x*(a[i]-a0)%m[i]+m[i])%m[i];    //%m[i]a0+=m0*x;    //
      m0*=m[i];}printf("%lld\n",pw(g,a0,m[0]+1));return 0;
}

转载于:https://www.cnblogs.com/Narh/p/9255778.html

bzoj 1951 [Sdoi2010]古代猪文 ——数学综合相关推荐

  1. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2194  Solved: 919 [Submit][Statu ...

  2. 1951: [Sdoi2010]古代猪文

    http://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意:求G^(C(N,N/K))%mod ( K|N) 1951: [Sdoi2010]古代猪 ...

  3. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...

  4. P2480 [SDOI2010]古代猪文(数论好题)

    P2480 [SDOI2010]古代猪文 题意: 给你n和g,求g∑d∣nCndmodpg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣n​Cnd​modp p=999911659 ...

  5. 【BZOJ 1951】 [Sdoi2010]古代猪文

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  6. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

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

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  8. bzoj1951 [Sdoi2010]古代猪文

    http://www.elijahqi.win/archives/3185 Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿 ...

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

    \(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会 ...

最新文章

  1. 照书学WPF之 Dependency Property 1
  2. linux 下安装nginx
  3. 学习Netflix管理员–第2部分
  4. PHP调用WebService接口
  5. 用Visual C#实现文件下载
  6. 机器视觉中使用光源及偏振镜解决物体反光问题
  7. 【个人笔记】OpenCV4 C++ 快速入门 00课
  8. matlab 平滑曲线连接_从零开始的matlab学习笔记——(16)函数绘图
  9. 员工离职损失大怎么办?知识管理系统来帮忙
  10. iOS——weak实现原理
  11. 西部数据绿盘、蓝盘、黑盘、红盘和紫盘的区别
  12. 【系统分析师之路】第十六章 复盘计算机网络(新技术领域)
  13. 2022年1月27日亲测|奥维互动地图加载谷歌地图等图源的方法
  14. Ubuntu设置全局socks代理
  15. 如何使用 JavaScript 创建水平和垂直标签?
  16. (导数)微分与积分的概念
  17. IT女性的职业困惑 (1)
  18. 瑞星微 AI情况简介
  19. L1-057 PTA使我精神焕发 (5 分)
  20. 软考-系统架构师大纲思维导图+真题下载

热门文章

  1. mybatis SqlMapConfig.xml environments
  2. MediaElementAudioSourceNode
  3. nginx http server
  4. C语言 底层IO lseek
  5. Scala match
  6. pandas.Series.isin
  7. Pandas 文本数据方法 find( ) rfind( ) index( ) rindex( )
  8. freecplus框架-tcp网络通信
  9. python中的mul函数_Sympy:“Mul”对象没有分层函数的“cos”属性
  10. android js 开屏动画,利用Flutter实现“孔雀开屏”的动画效果