【Tai_mount】算法学习 - 数论 - 组合数中模大质数相关问题(费马小定理,逆元,快速幂,线性递推)

菜鸡今天算是第一次尝试ACM相关的比赛(xjtu那边的训练赛),然后签到题被这个算组合数难住了。训练赛的话,我报以学习的目的(反正也做不了两个题的……)就边做边学了orz当然正式比赛不阔能这样的。

题目就是,一个宿舍n个人,问可以建立几个人数大于k的群。(经典女生宿舍笑话)

百度到一篇文章:
https://blog.csdn.net/qq_42403429/article/details/103311855

以下是自己的精简笔记:

概念:

费马小定理:p为质数,a%p!=0 => a^(p-1)≡1(mod p)

逆元:ax≡1(mod p)(a,p互质),则x为a关于p的逆元
有如下性质:t/a≡tb(mod p)

思路:

组合数需要模大质数,需要用到除法,只有+-*满足先取余再相+-*的要求,遇到除法就通过逆元来变成乘法,求逆元需要用到费马小定理,费马小定理里求幂需要快速幂或者线性递推。

费马小定理求逆元

a^(p-1)≡1(mod p) => a^(p-2)a≡1 (mod p) 所以a^(p-2)是a的逆元

快速幂

ab,把b拆成1,2,4,8……(写成二进制),然后我们只要算a1,a2,a4,a^8……就好。

原来学过不过忘了这会儿,贴一个刚找到的过来:

https://zhuanlan.zhihu.com/p/95902286

int qpow(int a,int n){
	int ans=1;
	while(n){
		if(n&1){
			ans*=a;
		}
		a*=a;
		n>>=1;
	}
	return ans;
}

相信我看到这里肯定就理解了就不解释了

线性递推

学完再补

posted @ 2021-08-18 17:41  Tai_mount  阅读(81)  评论(0)    收藏  举报