Lucas定理 中国剩余定理 数论

逆元: 若 a*b=1(%p) 则a是b在%p意义下的逆元。  则在%p意义下  一个数 除以a就等价于乘b

 两种求逆元方法:1、若p为质数时,则有性质则a^(p-1)=1(%p) 。   即a*a^(p-2)=1(%p)。   所以a的逆元就是a^(p-2)

           2、exgcd(a,b,x,y) 可求 ax+by=c=gcd(a,b)  若a,b互质 则可求a%b下的逆元

Lucas定理:{

  求C(n,m)在%p下的值    (p是质数)    —— Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p)

  为什么要求 p是质数?  因为Lucas证明中 要用到  (1+a)^p=(1+a^p)(%p)这个p为质数才有的性质   因为x^p=x(%p)

}

实际上 求大组合数 真正用的是 求 n!%p  复杂度 是跟p的质因数分解有关的  p=ai^bi(1<=i<=k)  则复杂度应该是 ai^bi 的最大值

中国剩余定理(孙子定理){

给出以下的一元线性同余方程组:

假设整数m1,m2, ... ,mn两两互质,则对任意的整数:a1,a2, ... ,an,方程组有解,并且通解可以用如下方式构造得到:

   ——  M

是整数m1,m2, ... ,mn的乘积

   ——  Mi是除了mi以外的n- 1个整数的乘积。

     (在%mi下)

则同余方程组 的通解形式为

  

那么在模M的意义下,方程组只有一个解:

}

 

时间: 2024-11-05 22:39:56

Lucas定理 中国剩余定理 数论的相关文章

hdu 5446(2015长春网络赛J题 Lucas定理+中国剩余定理)

题意:M=p1*p2*...pk:求C(n,m)%M,pi小于10^5,n,m,M都是小于10^18. pi为质数 M不一定是质数 所以只能用Lucas定理求k次 C(n,m)%Pi最后会得到一个同余方程组x≡B[0](mod p[0])x≡B[1](mod p[1])x≡B[2](mod p[2])......解这个同余方程组 用中国剩余定理 Sample Input19 5 23 5 Sample Output6 1 # include <iostream> 2 # include <

hdu 5446 Unknown Treasure (Lucas定理+中国剩余定理+快速乘)

题意:c( n, m)%M    M = P1 * P2 * ......* Pk (其中Pk是素数) 思路:Lucas定理中C(n,m)%M,M必须是素数,当M不是素数时,我们可以把它拆成素数的乘积 如果x=C(n,m)%M ,M=p1*p2*..*pk;  a[i]=Lucas(n,m)%pi: xΞa[1](mod p1) xΞa[2](mod p2) ... xΞa[k](mod pk) 用中国剩余定理就可以把x求出来 注意到这道题ll*ll 由于计算机底层设计的原因,做加法往往比乘法快

SDOI 2010--古代猪文(Lucas算法&amp;费马小定理&amp;中国剩余定理)

发现几乎每次数论题洛谷总是让我TLE一个点.... 附图: 最后那个点优化了很久终于过了.... 题意 iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会很大.当时的猪王国国王考虑到如果修一本字典,规模有可能远远超过康熙字典,花费的猪力.物力将难以估量.故考虑再三没有进行这一项劳猪伤财之举.当然,猪王国的文字后来随着历史变迁逐渐进行了简化,去掉了一些不常用的字. iPig打算研究古时某个朝代的猪文文字.根据相关文献记载,那个朝代流传的猪

【Lucas定理/费马小定理/中国剩余定理/扩展欧几里得】[BZOJ 1951] 古代猪文

[Description] 求 [Solution] 容易得到, 所以,重点在怎么求 如果是p-1是个质数,我们可以用sqrt(n)的时间枚举所有d,用Lucas定理分别计算求和即可. 但是我们发现p-1=2*3*4679*35617,并不是一个质数,所以Lucas定理不能用了吗?并不,我们可以算出这个合式分别对2.3.4679.35617的模值,写出四个同余方程,再用孙子定理求解即可.注意特判g==p的情况,此时费马小定理不成立,ans=0. [Code] #include<cmath> #

ACM-ICPC 2015 Changchun Preliminary Contest J. Unknown Treasure (卢卡斯定理+中国剩余定理)

题目链接:https://nanti.jisuanke.com/t/A1842 题目大意:给定整数n,m,k,其中1≤m≤n≤1018,k≤10, 然后给出k个素数,保证M=p[1]*p[2]……*p[k]≤1018,p[i]≤105 求C(n,m)%(p[1]*p[2]……*p[k]) 解题思路:因为模数太大,所以我们先用卢卡斯定理求出对每个素数的模,然后再通过中国剩余定理就可以求得对它们的乘积的模. 代码: #include<bits/stdc++.h> using namespace s

hdu1573-X问题-(扩展欧几里得定理+中国剩余定理)

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8416    Accepted Submission(s): 3066 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod

visit(卢卡斯定理&amp;&amp;中国剩余定理)

如此显然的组合数我把它当DP做,我真是.... 因为起点终点已经确定,我们发现如果我们确定了一个方向的步数其他方向也就确定了 组合数做法1: 设向右走了a步,然后向左走了b=a-n步,设向上为c,向下为d; c+d=t-a-b; c-d=m; 求出c=(t+n+m-i-i)/2;if(c%2)continue; (因为如果c不能整除2表示向右多走的步数无法走回) 组合数做法2: 参考nc神犇的做法 首先设水平方向一共走了i步,所以(i-n)/2为水平方向上返回的步数, 竖直方向上步数t-i,中同

hdu3579-Hello Kiki-(扩展欧几里得定理+中国剩余定理)

Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5489    Accepted Submission(s): 2164 Problem Description One day I was shopping in the supermarket. There was a cashier counting coins

【bzoj3782】上学路线 dp+容斥原理+Lucas定理+中国剩余定理

题目描述 小C所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M).小C家住在西南角,学校在东北角.现在有T个路口进行施工,小C不能通过这些路口.小C喜欢走最短的路径到达目的地,因此他每天上学时都只会向东或北行走:而小C又喜欢走不同的路径,因此他问你按照他走最短路径的规则,他可以选择的不同的上学路线有多少条.由于答案可能很大,所以小C只需要让你求出路径数mod P的值. 输入 第一行,四个整数N.M.T.P. 接下来的T行,每行两个整数,表示施工的路口的坐标. 输出 一