exLucas学习笔记

Tags:数学




写下抛硬币和超能粒子炮改

洛谷模板代码如下

#include<iostream>
#define ll long long
using namespace std;
void exgcd(int a,int b,int &x,int &y)
{
if(b==0) {x=1;y=0;return;}
exgcd(b,a%b,y,x);y-=a/b*x;
}
struct ex_lucas
{
int p,pk,jc[1000001];
void init()
{
for(int i=jc[0]=1;i<=pk;i++)
jc[i]=1ll*jc[i-1]*(i%p?i:1)%pk;
}
int ksm(int x,ll k)
{
int s=1;for(;k;k>>=1,x=1ll*x*x%pk)
if(k&1) s=1ll*s*x%pk;return s;
}
int inv(int a)
{
int x,y;exgcd(a,pk,x,y);
x=(x%pk+pk)%pk;return x;
}
int mul(ll n)
{
int s=1;
for(;n;n/=p) s=1ll*s*ksm(jc[pk],n/pk)%pk*jc[n%pk]%pk;
return s;
}
void Getp(ll n,int op,int &k) {for(;n;n/=p) k+=op*n/p;}
int C(ll n,ll m)
{
int a=mul(n),b=mul(m),c=mul(n-m),k=0;
Getp(n,1,k);Getp(m,-1,k);Getp(n-m,-1,k);
return 1ll*a*inv(b)%pk*inv(c)%pk*ksm(p,k)%pk;
}
}a[10];
ll n,m,p,x,tt,ans,A[11],B[11];
int exCRT()
{
int P=A[1],R=B[1];
for(int i=2;i<=tt;i++)
{
int x,y,np=A[i]*P;exgcd(P,A[i],x,y);
x=(1ll*x*(B[i]-R)%np+np)%np;
R=(1ll*x*P%np+R+np)%np;P=np;
}
return R;
}
int main()
{
cin>>n>>m>>p;x=p;
for(int i=2;i*i<=x;i++)
if(x%i==0)
{
a[++tt].p=i;a[tt].pk=1;
while(x%i==0) a[tt].pk*=i,x/=i;
}
if(x>1) ++tt,a[tt].p=a[tt].pk=x;
for(int i=1;i<=tt;i++)
a[i].init(),B[i]=a[i].C(n,m),A[i]=a[i].pk;
ans=exCRT();
cout<<ans<<endl;
}

exLucas学习笔记的更多相关文章

  1. $exLucas$学习笔记

    本来不打算写了的,,,但是感$jio$理解起来还是有点儿难度的来着,,,$so$还是瞎写点儿趴$QAQ$ $exLucas$主要有三步: 1)唯一分解$mod$并预处理$p^{k}$以内的阶乘 2)计 ...

  2. 「ExLucas」学习笔记

    「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. Oracle EBS AR 事务处理到期余额总计API

    declare    -- Local variables here   i integer;   x_line_original NUMBER;   x_line_remaining NUMBER; ...

  2. Linux 隐藏系统信息

    Linux查看系统信息 [更多参考]https://www.cnblogs.com/ftl1012/p/uname.html Linux隐藏系统信息 查看: cat /etc/issue.net    ...

  3. java中判断对象中属性值是否为空的函数

    public boolean checkObjFieldIsNull(Object obj) throws IllegalAccessException { boolean flag = false; ...

  4. Substring Search

    查找子字符串 Introduction 在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M. 这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求. ...

  5. 面向对象程序设计_课堂作业_01_Circle

    The 1st classwork of the C++ program 题目: Create a program that asks for the radius of a circle and p ...

  6. [转载并收藏]JavaScript 疲劳终极指南:我们行业的真相

    这篇文章说的深得我心,特别是前半段. 特此收藏. 中文译文:http://www.zcfy.cc/article/the-ultimate-guide-to-javascript-fatigue-re ...

  7. IOS和安卓WEB页面,input输入框被软键盘遮挡解决方法

    本来以为这问题就只有ios才有,身边也没有android机测试,网上一搜,貌似有这个问题的还不少.最后把各种解决方法试了一边,貌似没什么用. 最后是这样解决的: setInterval(functio ...

  8. python中string格式化

    python中可以对string, int, float等数据类型进行格式化操作.下面举例来说明一些常用操作. 先贴出 python 对 String Formatting Operations 讲解 ...

  9. 20155314 2016-2017-2《Java程序设计》课程总结

    20155314 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:刘子健的第一篇博客 预备作业2:刘子健的第二篇博客--有关CCCCC语言(・᷄ᵌ・᷅) ...

  10. Python基础-画图:matplotlib

    Python画图主要用到matplotlib这个库.具体来说是pylab和pyplot这两个子库.这两个库可以满足基本的画图需求. pylab神器:pylab.rcParams.update(para ...