【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcd
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
2.扩展gcd )extend great common divisor
ll exgcd(ll l,ll r,ll &x,ll &y)
{
if(r==){x=;y=;return l;}
else
{
ll d=exgcd(r,l%r,y,x);
y-=l/r*x;
return d;
}
}
3.求a关于m的乘法逆元
ll mod_inverse(ll a,ll m){
ll x,y;
if(exgcd(a,m,x,y)==)//ax+my=1
return (x%m+m)%m;
return -;//不存在
}
补充:求逆元还可以用$$ans = \frac{a}{b} \bmod m = (a \bmod (m\cdot b)) /b $$
4.快速幂quick power
ll qpow(ll a,ll b,ll m){
ll ans=;
ll k=a;
while(b){
if(b&)ans=ans*k%m;
k=k*k%m;
b>>=;
}
return ans;
}
5.快速乘,直接乘会爆ll时需要它,也叫二分乘法。
ll qmul(ll a,ll b,ll m){
ll ans=;
ll k=a;
ll f=;//f是用来存负号的
if(k<){f=-;k=-k;}
if(b<){f*=-;b=-b;}
while(b){
if(b&)
ans=(ans+k)%m;
k=(k+k)%m;
b>>=;
}
return ans*f;
}
6.中国剩余定理CRT (x=ai mod mi)
ll china(ll n, ll *a,ll *m) {
ll M=,y,x=,d;
for(ll i = ; i <= n; i++) M *= m[i];
for(ll i = ; i <= n; i++) {
ll w = M /m[i];
exgcd(m[i], w, d, y);//m[i]*d+w*y=1
x = (x + y*w*a[i]) % M;
}
return (x+M)%M;
}
7.筛素数,全局:int cnt,prime[N],p[N];
void isprime()
{
cnt = ;
memset(prime,true,sizeof(prime));
for(int i=; i<N; i++)
{
if(prime[i])
{
p[cnt++] = i;
for(int j=i+i; j<N; j+=i)
prime[j] = false;
}
}
}
8.快速计算逆元
补充:>>关于快速算逆元的递推式的证明<<
void inverse(){
inv[] = ;
for(int i=;i<N;i++)
{
if(i >= M) break;
inv[i] = (M-M/i)*inv[M%i]%M;
}
}
9.组合数取模
n和m 10^5时,预处理出逆元和阶乘
ll fac[N]={,},inv[N]={,},f[N]={,};
ll C(ll a,ll b){
if(b>a)return ;
return fac[a]*inv[b]%M*inv[a-b]%M;
}
void init(){//快速计算阶乘的逆元
for(int i=;i<N;i++){
fac[i]=fac[i-]*i%M;
f[i]=(M-M/i)*f[M%i]%M;
inv[i]=inv[i-]*f[i]%M;
}
}
n较大10^9,但是m较小10^5时,
ll C(ll n,ll m){
if(m>n)return ;
ll ans=;
for(int i=;i<=m;i++)
ans=ans*(n-i+)%M*qpow(i,M-,M)%M;
return ans;
}
n和m特别大10^18时但是p较小10^5时用lucas
10.Lucas大组合取模
#define N 100005
#define M 100007
ll n,m,fac[N]={};
ll C(ll n,ll m){
if(m>n)return ;
return fac[n]*qpow(fac[m],M-,M)%M*qpow(fac[n-m],M-,M)%M;//费马小定理求逆元
}
ll lucas(ll n,ll m){
if(!m)return ;
return(C(n%M,m%M)*lucas(n/M,m/M))%M;
}
void init(){
for(int i=;i<=M;i++)
fac[i]=fac[i-]*i%M;
}
to be continued...
【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数的更多相关文章
- hdu-5667 Sequence(矩阵快速幂+费马小定理+快速幂)
题目链接: Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
- 51Nod 3的幂的和(扩展欧几里德求逆元)
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007 Input 输入一个数N(0 <= N <= 10^9) Output 输出:计算结果 Input示例 3 O ...
- 整数快速乘法/快速幂+矩阵快速幂+Strassen算法
快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c 二.矩 ...
- 矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757
矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算 ...
- P3390 【模板】矩阵快速幂
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- poj3613 Cow Relays【好题】【最短路】【快速幂】
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions:9207 Accepted: 3604 Descrip ...
- [C/C++] 快速幂讲解
转自:http://www.cnblogs.com/CXCXCXC/p/4641812.html 快速幂这个东西比较好理解,但实现起来到不老好办,记了几次老是忘,今天把它系统的总结一下防止忘记. 首先 ...
- [学习笔记]快速幂&&快速乘
本质:二进制拆分(你说倍增我也没脾气).然后是一个配凑. 合起来就是边二进制拆分,边配凑. 快速乘(其实龟速):把乘数二进制拆分.利用乘法分配率. 用途:防止爆long long 代码: ll qk( ...
- 矩阵快速幂--51nod-1242斐波那契数列的第N项
斐波那契额数列的第N项 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, ...
随机推荐
- Hoj2634 How to earn more?
How to earn more My Tags (Edit) Source : ww Time limit : 1 sec Memory limit : 64 M Submitted ...
- http协议(八)请求首部字段
请求首部字段 定义:请求首部字段是从客户端到服务器发送请求报文中所使用的字段,里面包含了附加信息.客户端信息以及对响应内容相关的优先级等内容 1.Accept 通知服务器用户代理可处理的媒体类型及媒体 ...
- 临时表之IF-ELSE
1.解决输出单列到临时表 场景:存储过程传入id,id为缺省的过滤条件,如果id为0,则查找出tt表中的所有id作为过滤条件 目的:id不为0时,过滤id 解决:用case when来代替if els ...
- Unicode字符列表(超完整)
Unicode字符列表(超完整)Unicode, 字符, 列表代码 显示 描述U+0020 空格 U+0021 ! 叹号 U+0022 " 双引号 U+0023 # 井号 U+0024 $ ...
- [数据库]漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)
ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人 ...
- K8 系统中省市县数据表的设计可以反映出什么? 通过一个基础业务表的设计品味软件系统的整体架构
1:没有严谨的Id思想,不变化的Id思想,看不见的Id的思想. 2:数据不严谨,没有上下级关系,没有树形结构,ParentId 的思想. 3:表之间的关系都是弱关联,基础数据一修改业务数据就容易乱套. ...
- css3属性书写顺序
今天写了个小demo想要利用transition 和transform以及transition-delay来实现鼠标移上去的延时动画,结果发现不能实现transition的变化效果.调试后发现只有把 ...
- 2016古装动作喜剧《笨贼别跑》HD720P.国语中字
导演: 雷金克编剧: 郭卫鹏 / 李诗怡 / 马强主演: 彭波 / 李添诺 / 董向荣 / 韩丰 / 董怡君类型: 喜剧 / 动作 / 古装制片国家/地区: 中国大陆语言: 汉语普通话上映日期: 20 ...
- 工作随笔——一次简单的Maven加速构建实战
注意:所有的编译.打包.部署全部是通过Jenkins完成的. 公司内部有一个项目,开始做的时候已经预计到会有很多客服端.所以开发就搞了如下的结构: fft-api # 公用的API,所有的程序都必须使 ...
- Jump Game 的三种思路 - leetcode 55. Jump Game
Jump Game 是一道有意思的题目.题意很简单,给你一个数组,数组的每个元素表示你能前进的最大步数,最开始时你在第一个元素所在的位置,之后你可以前进,问能不能到达最后一个元素位置. 比如: A = ...