/******************************
大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
使用:程序最开始调用getprime(),需要时调用C(n,m,p)
复杂度:O( n*log(n) )
******************************/
typedef long long ll;
#define N 210000 int PRIME[N/]; void getprime()
{
bool pmark[N+];
memset(pmark,,sizeof(pmark));
int pcnt=;
PRIME[pcnt++]=;
for(int i=;i<N+;i+=)
{
if(pmark[i]==)
{
PRIME[pcnt++]=i;
for(int j=i;j<N+;j+=i) pmark[j]=;
}
}
} /**************
快速幂模板
调用:Quk_Mul(a,b,mod)
返回:a^b%mod
复杂度:当mod>10^9,log(mod)*log(b),否则log(b)
***************/
long long Mod_Mul(long long a,long long b,long long mod)
{
long long msum=;
while(b)
{
if(b&) msum = (msum+a)%mod;
b>>=;
a = (a+a)%mod;
}
return msum;
} long long Quk_Mul(long long a,long long b,long long mod)
{
bool qmflag=mod>1e9?:;
long long qsum=;
while(b)
{
if(b&) qsum = (qmflag==) ? Mod_Mul(qsum,a,mod) : (qsum*a)%mod;
b>>=;
a = (qmflag==) ? Mod_Mul(a,a,mod) : (a*a)%mod;
}
return qsum;
} // 得到n! 中有多少个d因子
int getdn(int n,int d)
{
int sum=;
while(n)
{
sum += n/d;
n/=d;
}
return sum;
} ll C(int n,int m,ll p)
{
if(m>n) return ;
ll sumc=;
for(int i=;PRIME[i]<=n;i++)
{
int cnum = getdn(n,PRIME[i])-getdn(m,PRIME[i])-getdn(n-m,PRIME[i]);
sumc = sumc*Quk_Mul(PRIME[i], cnum, p)%p;
}
return sumc;
} /*
int main() {
getprime();
int T;
cin>>T;
while(T--)
{
int n,m,p;
cin>>n>>m>>p;
cout<<C(n,m,p)<<endl;
}
return 0;
}
*/

大组合取模之: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. Quartz配置CronTrigger

    CronTrigger 构造器 String name, //触发器名称 String group, //触发器的组名 String jobName, //job名称 String jobGroup, ...

  2. 在linux下玩转usb摄像头

    硬件平台:PC机一台 .usb摄像头 操作系统:Linux3.0.8 交叉编译环境:arm-none-Linux-gnueabi-gcc  4.5.1 调试步骤: 一.linux 内核解压 1.1使用 ...

  3. 2017.6.8 spring-ldap基本使用总结

    之前学习过spring-ldap的官方文档:2017.4.10 spring-ldap官方文档学习 现在是对实际使用的spring-ldap及使用过程中遇到的问题,进行总结. 1.spring-lda ...

  4. android SQLite(单词的添加与查询应用)

    本人小白,刚接触android,为方便记忆,将平时练习的代码写下来,跟大家分享,也希望大神批评指正. 这个实例主要用到的SQLite数据库的操作,可以向数据库添加单词,查询,修改以及删除单词,描述如有 ...

  5. 单一按钮显示/隐藏&&提示框效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. ReadWriteLock 读写锁(读书笔记)

     读写分离锁可以有效的帮助减少锁的竞争,提升系统的效率, 读-读不互斥 读读之间不阻塞 读-写互斥 读阻塞写,写也会阻塞读 写-写互斥 写写阻塞 在系统中,读操作次数远远大于写操作,则读写锁就可以发挥 ...

  7. ionic准备之angular基础———服务provider 和 factory和service(9)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Python中的import和from import

    一.Python路径介绍 在python用import或者from...import来导入相应的模块. 模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把 ...

  9. 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。

    “Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3.exe”. ...

  10. react-native 创建 ios 项目

    创建React-Native项目 打开终端输入react-native init ProjectName,这里的ProjectName可以改成你想创建的项目名称.然后有两种方法启动项目 1.从终端开启 ...