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 ...
随机推荐
- MySQL Bug导致异常宕机的分析流程
原文链接:http://click.aliyun.com/m/42521/ 摘要: 本文主要通过一个bug来记录一下如何分析一个MySQL bug的崩溃信息. 版本:Percona 5.7.17-11 ...
- Oracle恢复删除数据
可以通过SCN和时间戳两种方法来恢复. 一.通过SCN恢复删除且已经提交的数据 查询当前SCN select current_scn from v$database; 如图: 缩小范围进行查询 查询到 ...
- 审计系统---堡垒机python下ssh的使用
堡垒机python下ssh的使用 [堡垒机更多参考]http://www.cnblogs.com/alex3714/articles/5286889.html [paramiko的Demo实例]htt ...
- springmvc常用的组件,注解,跳转
路径映射 XXXHandlerMapping 随开发配置越来越多 注解到java代码中来简化xml配置 请求到哪个Controller 控制器bean Controller 随着开发配置越来越多 注解 ...
- November 16th 2016 Week 47th Wednesday
Success is falling nine times and getting up ten. 成功就是哪怕跌倒九次,也要在第十次爬起来. For most of us, we may choos ...
- .split("\n") 和 .strip("我是诗人的感叹")
s10='''诗人 学者 作家 # 这里面是有换行 "\n" 的, 要想变成一行, 删除strip不行,要用 split分开,这样就能变成一个列表,里面是各个字 ...
- U-Mail:多方面因素避免EDM邮件进垃圾箱
有很多做邮件营销的企业客户给U-Mail来电或来函咨询一件困扰他们的事:群发邮件时,要怎么样才能降低被收件人列入垃圾邮件的概率呢?其实关于这个问题,U-Mail小编已经请资深营销专家解答过多次了,经常 ...
- nginx alias
A path to the file is constructed by merely adding a URI to the value of the root directive. If a UR ...
- php 分享一个object(stdclass)转数组的函数
经常调用一个借口之后 返回的内容是json串,利用php函数json_decode() 解析json串之后得到的 数据类型为object(stdclass) 这是一个对象,要取其中的内容也可以 取得, ...
- JQuery Mobile+JS实现智能浮动定位导航条
实现原理 主要用到几个知识点: 什么是scrollTop? CSS position定位 判断是否为IE6浏览器 元素相对于窗口的距离 原理:1,浏览器向下滚动时,当document的scrollTo ...