1. /******************************
  2. 大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
  3. 使用:程序最开始调用getprime(),需要时调用C(n,m,p)
  4. 复杂度:O( n*log(n) )
  5. ******************************/
  6. typedef long long ll;
  7. #define N 210000
  8.  
  9. int PRIME[N/];
  10.  
  11. void getprime()
  12. {
  13. bool pmark[N+];
  14. memset(pmark,,sizeof(pmark));
  15. int pcnt=;
  16. PRIME[pcnt++]=;
  17. for(int i=;i<N+;i+=)
  18. {
  19. if(pmark[i]==)
  20. {
  21. PRIME[pcnt++]=i;
  22. for(int j=i;j<N+;j+=i) pmark[j]=;
  23. }
  24. }
  25. }
  26.  
  27. /**************
  28. 快速幂模板
  29. 调用:Quk_Mul(a,b,mod)
  30. 返回:a^b%mod
  31. 复杂度:当mod>10^9,log(mod)*log(b),否则log(b)
  32. ***************/
  33. long long Mod_Mul(long long a,long long b,long long mod)
  34. {
  35. long long msum=;
  36. while(b)
  37. {
  38. if(b&) msum = (msum+a)%mod;
  39. b>>=;
  40. a = (a+a)%mod;
  41. }
  42. return msum;
  43. }
  44.  
  45. long long Quk_Mul(long long a,long long b,long long mod)
  46. {
  47. bool qmflag=mod>1e9?:;
  48. long long qsum=;
  49. while(b)
  50. {
  51. if(b&) qsum = (qmflag==) ? Mod_Mul(qsum,a,mod) : (qsum*a)%mod;
  52. b>>=;
  53. a = (qmflag==) ? Mod_Mul(a,a,mod) : (a*a)%mod;
  54. }
  55. return qsum;
  56. }
  57.  
  58. // 得到n! 中有多少个d因子
  59. int getdn(int n,int d)
  60. {
  61. int sum=;
  62. while(n)
  63. {
  64. sum += n/d;
  65. n/=d;
  66. }
  67. return sum;
  68. }
  69.  
  70. ll C(int n,int m,ll p)
  71. {
  72. if(m>n) return ;
  73. ll sumc=;
  74. for(int i=;PRIME[i]<=n;i++)
  75. {
  76. int cnum = getdn(n,PRIME[i])-getdn(m,PRIME[i])-getdn(n-m,PRIME[i]);
  77. sumc = sumc*Quk_Mul(PRIME[i], cnum, p)%p;
  78. }
  79. return sumc;
  80. }
  81.  
  82. /*
  83. int main() {
  84. getprime();
  85. int T;
  86. cin>>T;
  87. while(T--)
  88. {
  89. int n,m,p;
  90. cin>>n>>m>>p;
  91. cout<<C(n,m,p)<<endl;
  92. }
  93. return 0;
  94. }
  95. */

大组合取模之:1<=n<=m<=1e6,1<=p<=1e9的更多相关文章

  1. 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

    typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...

  2. 求解复数组 中模较大的N个数

    //求解复数组 中模较大的N个数 void fianN_Complex(Complex outVec[], int& len, std::vector<int>& inde ...

  3. poj2305-Basic remains(进制转换 + 大整数取模)

    进制转换 + 大整数取模一,题意: 在b进制下,求p%m,再装换成b进制输出. 其中p为b进制大数1000位以内,m为b进制数9位以内二,思路: 1,以字符串的形式输入p,m; 2,转换:字符串-&g ...

  4. Snowflake Snow Snowflakes(哈希,大素数取模)

    Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 27277   Accepted: 7197 Description You ...

  5. Moodle 3.4中添加小组、大组、群

    Moodle在高中应用时经常要用到年级.班级和小组,我们可以用群.大组.小组来代替. 小组设置:网站首页-->现有课程-->右上角的设置按钮-->更多-->用户-->小组 ...

  6. cogs 2170. 大整数取模

    2170. 大整数取模 ★   输入文件:bigint.in   输出文件:bigint.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 输入正整数n和m,输出n mo ...

  7. HDU 5698 大组合数取模(逆元)

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  8. lucas定理解决大组合数取模

    LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...

  9. 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】

    3751: [NOIP2014]解方程 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4856  Solved: 983[Submit][Status ...

随机推荐

  1. 【TCP/IP】IP路由选择

    IP层在内存中有一个路由表,当有数据要发送时.它要对该表进行一次搜索以确认转发地址.收到的数据到达IP层时,IP层会检查数据报的目的地址是否为本机IP或广播IP: 假设是.就依据IP首部协议字段的协议 ...

  2. 关于BufferedInputStream和BufferedOutputStream的实现原理的理解

    在介绍FileInputStream和FileOutputStream的例子中,使用了一个byte数组来作为数据读入的缓冲区,以文件存取为例,硬盘存取的速度远低于内存中的数据存取速度.为了减少对硬盘的 ...

  3. Linux用ps命令查找进程PID再用kill命令终止进程的方法

    使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即 ...

  4. tensorflow TensorArray 代码例子

    import tensorflow as tf import numpy as np B=3 D=4 T=5 tf.reset_default_graph() xs=tf.placeholder(sh ...

  5. ASP.NET MVC学习---(七)Razor视图引擎语法

    之前体验过razor视图引擎@符号的威力了吧~ 连我这个初学者都能感觉到确实省时省力方便快捷 简直就是居家旅行*人*货必备之物啊(这里和谐两个字~) 那么现在就开始对razor的语法进一步介绍~ 1. ...

  6. git学习——撤销操作

    修改最后一次提交:--amend 在提交完成后发现漏掉了几个文件没有加进去,或者提交信息写错了.想要修改怎么办? 现在可以先把需要修改的信息进行修改如:git add 添加没有添加的文件,vim &l ...

  7. 有效的web安全信息源

    杂志:hackcto ,书安 乌云知识库,91ri.org,安全脉搏(http://www.secpulse.com/) 乌云公开漏洞,乌云热点漏洞,90sec 内网渗透找90.web注入找习科, 已 ...

  8. Linux Java开发环境

    一.旧版本JDK卸载 1.卸载系统自带JDK版本 #rpm -qa|grep gcj 查看到如下信息,如图所示:   进行卸载默认安装JDK: #rpm -e --nodeps java-1.4.2- ...

  9. Linux非阻塞IO(八)使用epoll重新实现非阻塞的回射服务器

    本文无太多内容,主要是几个前面提到过的注意点: 一是epoll的fd需要重新装填.我们将tcp_connection_t的指针保存在数组中,所以我们以这个数组为依据,重新装填fd的监听事件. //重新 ...

  10. Linux非阻塞IO(三)非阻塞IO中缓冲区Buffer的实现

    本文我们来实现回射服务器的Buffer.   Buffer的实现   上节提到了非阻塞IO必须具备Buffer.再次将Buffer的设计描述一下: 这里必须补充一点,writeIndex指向空闲空间的 ...