【bzoj1951】: [Sdoi2010]古代猪文

因为999911659是个素数

欧拉定理得

然后指数上中国剩余定理

然后分别lucas定理就好了

注意G==P的时候的特判

  1. /* http://www.cnblogs.com/karl07/ */
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. #define ll long long
  9.  
  10. const ll P=;
  11. const ll p1[] = {, , , , };
  12. const ll N=;
  13. ll g,n,cnt=;
  14. ll fac[N+],ifac[N+];
  15. ll p[N],ans[];
  16.  
  17. ll Q_pow(ll a,ll b,ll p){
  18. ll ans=;
  19. while (b){
  20. if (b&) ans=ans*a%p;
  21. a=a*a%p;
  22. b=(b>>);
  23. }
  24. return ans;
  25. }
  26.  
  27. void FAC(ll p){
  28. ifac[]=fac[]=;
  29. for (int i=;i<=N;i++) fac[i]=fac[i-]*i%p,ifac[i]=Q_pow(fac[i],p-,p);
  30. }
  31.  
  32. ll C(ll n,ll m,ll p){
  33. if (m>n) return ;
  34. return fac[n]*ifac[m]%p*ifac[n-m]%p;
  35. }
  36.  
  37. ll lucas(ll n,ll m,ll p){
  38. if (m==) return ;
  39. return lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;
  40. }
  41.  
  42. void fj(ll x){
  43. for (int i=;i*i<=x;i++){
  44. if (x%i==){
  45. p[++cnt]=i;
  46. if (i*i!=x) p[++cnt]=n/i;
  47. }
  48. }
  49. }
  50.  
  51. ll gcd(ll a,ll b){return b ? gcd(b,a%b) : a;}
  52.  
  53. void ex_gcd(ll a,ll b,ll &x,ll &y){
  54. if (b==){x=;y=;return;}
  55. ex_gcd(b,a%b,y,x);
  56. y-=x*(a/b);
  57. }
  58.  
  59. ll China(){
  60. ll a0=ans[],p0=p1[];
  61. for (int i=;i<=;i++){
  62. ll x,y,g=gcd(p0,p1[i]);
  63. ex_gcd(p0,p1[i],x,y);
  64. x=(x*(ans[i]-a0)%p1[i]+p1[i])%p1[i];
  65. a0=a0+x*p0;
  66. p0=p0/g*p1[i];
  67. }
  68. return a0;
  69. }
  70.  
  71. void work(){
  72. for(int i=;i<=;i++){
  73. FAC(p1[i]);
  74. for (int j=;j<=cnt;j++){
  75. ans[i]=(ans[i]+lucas(n,n/p[j],p1[i]))%p1[i];
  76. }
  77. }
  78. printf("%lld\n",Q_pow(g,China(),P));
  79. }
  80.  
  81. int main(){
  82. scanf("%lld%lld",&n,&g);
  83. if (g==P) {puts(""); return ;}
  84. fj(n);
  85. work();
  86. return ;
  87. }
  88.   

各种zz的错误。。调了一年

而且跑的巨慢无比。。

【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理的更多相关文章

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

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

  2. bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】

    首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...

  3. bzoj1951 [Sdoi2010]古代猪文 ——数论综合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢 ...

  4. 【BZOJ1951】古代猪文(CRT,卢卡斯定理)

    [BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...

  5. BZOJ 1951: [Sdoi2010]古代猪文( 数论 )

    显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...

  6. BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...

  7. BZOJ1951[SDOI2010]古代猪文

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

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

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

  9. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

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

随机推荐

  1. 蓝桥杯 基础练习 BASIC-24 龟兔赛跑预测

    基础练习 龟兔赛跑预测   时间限制:1.0s   内存限制:512.0MB 问题描述 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑.于是世界上各 ...

  2. win10/server2019 系统安装 详解

    https://www.microsoft.com/zh-cn/software-download/windows10 https://go.microsoft.com/fwlink/?LinkId= ...

  3. Ueditor/自定义配置

    UEditor除 了具有轻量.可定制等优点外,还始终将优化编辑操作.提升用户体验摆在了很重要的位置.在这一点上,除了对编辑器功能.性能.实现细节等不断地改进和追求 创新之外,众多灵活而人性化的自定义配 ...

  4. linux设置支持中文

    LANG="zh_CN.UTF-8" #LANG="zh_CN.GB18030" #LANG=en_US.UTF-8 LANGUAGE="zh_CN. ...

  5. python 函数相关定义

    1.为什么要使用函数? 减少代码的冗余 2.函数先定义后使用(相当于变量一样先定义后使用) 3.函数的分类: 内置函数:python解释器自带的,直接拿来用就行了 自定义函数:根据自己的需求自己定义的 ...

  6. Javascript ——Navigator对象

    见 <Javascript 高级程序设计 第二版> P172 一.检测插件: 1.获取所有插件名称: 非IE浏览器:根据plugins数组, function getplugins() { ...

  7. 11-24网页基础--Js框架及学习思路

    第一部分 基本语法: 1.数据类型(字符串.小数.整数.布尔.时间日期)var s="3.14" var n=parsefloat(s) s+=5;var s="abc3 ...

  8. Android源码中添加C可执行程序

    在Android源码中添加C/CPP可执行程序一般保存在external目录中 下面是每个文件的内容 ①add.c #include "add.h" int add (int a, ...

  9. 用sass的minix定义一些代码片段,且可传参数

    /** *@module功能 *@description生成全屏方法 *@method fullscreen *@version 1.7.0 *@param{Integer}$z-index 指定层叠 ...

  10. Java判断字符串是否包含数字

    public static boolean isContainNumber(String company) { Pattern p = Pattern.compile("[0-9]" ...