大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
/******************************
大组合取模之: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的更多相关文章
- 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数
typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...
- 求解复数组 中模较大的N个数
//求解复数组 中模较大的N个数 void fianN_Complex(Complex outVec[], int& len, std::vector<int>& inde ...
- poj2305-Basic remains(进制转换 + 大整数取模)
进制转换 + 大整数取模一,题意: 在b进制下,求p%m,再装换成b进制输出. 其中p为b进制大数1000位以内,m为b进制数9位以内二,思路: 1,以字符串的形式输入p,m; 2,转换:字符串-&g ...
- Snowflake Snow Snowflakes(哈希,大素数取模)
Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27277 Accepted: 7197 Description You ...
- Moodle 3.4中添加小组、大组、群
Moodle在高中应用时经常要用到年级.班级和小组,我们可以用群.大组.小组来代替. 小组设置:网站首页-->现有课程-->右上角的设置按钮-->更多-->用户-->小组 ...
- cogs 2170. 大整数取模
2170. 大整数取模 ★ 输入文件:bigint.in 输出文件:bigint.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 输入正整数n和m,输出n mo ...
- HDU 5698 大组合数取模(逆元)
瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- lucas定理解决大组合数取模
LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
随机推荐
- Makefile之嵌套执行make
1.在Makefile中 一般使用一个总控Makefile来指明文件的编译规则 如: subsystem: cd subdir && $(MAKE) 其等价于 subsystem: $ ...
- appium 几点总结(转)
1. 建立session时常用命令: DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("brow ...
- JS编码三种方法的区别:escape、encodeURI和encodeURIComponent
1.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读.编码之后的效果是%XX或者%uXXXX这种形式.其中 ...
- android开发常用地址
一. android市场占用率的url http://developer.android.com/about/dashboards/ 二. ADT下载 下载地址是:http://developer.a ...
- 【OpenGL 学习笔记01】HelloWorld演示样例
<<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比較踏实,哈哈. 我的主题是,好记性不如烂笔头. ========== ...
- Win10 导航窗口不能移动文件win10 资源管理器 无法拖动文件到左侧驱动器
Win10 导航窗口不能移动文件怎么办 Win10左侧导航栏不能移动文件怎么办 win10 资源管理器 无法拖动文件到左侧驱动器怎么办 在同一个文件夹可以拖动来移动文件,拖到地址栏的面包屑也可以移动文 ...
- 【BIEE】BIEE 11g BI Publisher报表开发实例
环境准备 JDK下载地址:直接去百度软件中心下载即可 BIPublisher下载地址:http://pan.baidu.com/s/1bpk03Jh 本例子中以win7 32位操作系统为例 1.安装已 ...
- 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定
众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...
- The Application does not have a valid signature
真机运行程序,报错(The application does not have a valid signature,如图 环境:Xcode7.3,使用cocoapods管理第三方库 如果确认证书没有问 ...
- ios 从url字符串中获取图片名字
NSString *str = @"http://pic92.nipic.com/file/20160323/22486259_160209631000_2.jpg"; NSLog ...