exLucas学习笔记
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学习笔记的更多相关文章
- $exLucas$学习笔记
本来不打算写了的,,,但是感$jio$理解起来还是有点儿难度的来着,,,$so$还是瞎写点儿趴$QAQ$ $exLucas$主要有三步: 1)唯一分解$mod$并预处理$p^{k}$以内的阶乘 2)计 ...
- 「ExLucas」学习笔记
「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
随机推荐
- windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置
最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本 由于现在加密的更改, 能支持zend guar ...
- 优化 ExpressRoute 路由
当你有多个 ExpressRoute 线路时,可以通过多个路径连接到 Azure.结果就是,你所采用的路由可能不是最理想的 - 也就是说,你的流量可能会经历较长的路径才能到达 Azure,而 Azur ...
- Breathing During Sleep
TPO24-2 Breathing During Sleep Of all the physiological differences in human sleep compared with wak ...
- NoSQL数据库---NoSQL数据库的分类
NoSQL数据库的分类 个人理解一下文档型数据库: 就是键值对数据库的升级,允许键值之间嵌套键值,比如JSON格式的数据.效率比key_value的数据库更高. [更多参考]http://www.cn ...
- 安全紧急预警-防范新型 Sigrun 勒索病毒
近日,互联网上出现一种 Sigrun 勒索病毒,其通过垃 圾邮件.网站捆绑软件等方式进行传播.该病毒一旦植入到 用户的服务器,将把系统文件加密为.sigrun 的文件,进而 向受害者勒索虚拟货币.该新 ...
- September 19th 2017 Week 38th Tuesday
Live boldly. Push yourself. Don't settle. 勇敢生活,突破自我,永不设限! Don't indulge in the past, whether it was ...
- print(n) 和 while/for 并列的时候, print()只会打印出最后一个结果
n=0while n <10: n+=1print(n) # print(n)放在while的外面和while并列的时候, 只会打印出最后一个结果 n=0while n <10: n+=1 ...
- 寒假短期学习计划 - C++
寒假短期学习计划 - C++ 一.所选课程 && 相关 0.选以下课的理由: 选课理由0: 只是短期的计划,先选些短视频感受:之后再视情况选其他课: 选课理由1: 难度低,以前自学过一 ...
- Qimage QBuffer
QImage image;QByteArray ba;QBuffer buffer(&ba);buffer.open(QIODevice::WriteOnly);image.save(& ...
- CORS跨域与Nginx反向代理跨域优劣对比
最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...