数论集合
Posted cdcq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论集合相关的知识,希望对你有一定的参考价值。
零,前言:
学chty_sqy开个数论集合
学OI的时候以看数论就头大,现在该还了 T_T
建议推导和证明不熟或不会的同学动手推导
而且公式看上去不太清楚,学习的同学请仔细阅读
以前数论怎么都学不会,主要还是浮躁,不仔细看,没有动手 orz
一,gcd(欧几里得算法):
两个数a和b的最大公因数被称为gcd(a, b)
求gcd通常用欧几里得算法
原理:gcd(a, b)=gcd(b, a%b)
详情:https://www.cnblogs.com/cdcq/p/11366100.html
代码:
1 int gcd(int a,int b) return b ? gcd(b,a%b) : a;
二,exgcd(扩展欧几里得算法):
数论守门员
有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行。
扩展欧几里得算法研究的是形如 a*x+b*y=c 的丢番图方程的解
方程有解当且仅当gcd(a, b)|c
原理:a*x1+b*y1=gcd(a, b),b*x2+(a%b)*y2=gcd(b, a%b),gcd(a, b)=gcd(b, a%b) => x1=y2,y1=(x2-⌊a/b⌋*y2)
详情:https://www.cnblogs.com/cdcq/p/11366100.html
代码:
1 void exgcd(int a,int b,int &x,int &y) 2 if(!b) 3 x=1,y=0; 4 return ; 5 6 exgcd(b,a%b,x,y); 7 int z=x; 8 x=y,y=(z-a/b*y); 9
以上是关于数论集合的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 360D Levko and Sets (数论好题)