素数
赛场上常用的素数: (10^9+7,10^8+7,10^9+9,998244353(NTT),1145141,19260817(mbox{谨慎使用}))
素数分布:记(f(x))为不大于(x)的素数个数,(f(x)approx x/lnspace x)
欧几里得算法(辗转相除法)
记两数为(a>b),则最坏时间复杂度:(O(log_2space a)),情况为取到斐波那契数列的相邻两项
int gcd(int a,int b) {
if(!b) {
return a;
}
return gcd(b,a%b);
}//可压行,此处略
证明:略
最小公倍数
(lcm(a,b)=a/gcd(a,b)cdot b)
裴蜀定理
存在(x,y),使得(ax+by=gcd(a,b)),证明略
用途:扩展欧几里得
扩展欧几里得
在求(gcd(a,b))时顺便求出(ax+by=gcd(a,b))的特解
int exgcd(int a,int b,int &x,int &y) { //扩展欧几里得算法
if(b==0) {
x=1,y=0;
return a; //到达递归边界开始向上一层返回
}
int r=exgcd(b,a%b,x,y),temp=y; //把x y变成上一层的
y=x-(a/b)*y;
x=temp;
return r; //得到a b的最大公因数
}