信息竞赛中的数学基础

p.s 还未完成

最大公约数和最小公倍数

1.最大公约数 gcd
2.最小公倍数 lcm
3.定理
gcd(a,b)*lcm(a,b)=a*b

欧几里得算法

即辗转相除法

gcd(a,b)=gcd(b,a%b)
性质:
若a,b为偶数,则gcd(a,b)=2*gcd(a/2,b/2)
若a偶b奇,则gcd(a,b)=gcd(a/2,b)

唯一分解定理

任意一个大于1的整数n,均可以表示为若干
个素数的乘积,且这个形式是唯一的。
n=p1m1*p2m2*……pkmk
其中,p1,p2,……pk 为n的质因子。

质数

因数只有1和本身的数(1不是质数)
判断质数方法

    int prime[MAXP];
    bool flag[MAXN];
    int j=0;
    for(int i=2;i<=n;i++)
    {
       if(flag[i]==0)
        prime[j++]=i;
        for(int k=0;k<j;k++)
        {
           if(prime[k]*i>n)break;
           flag[prime[k]*i]=1;
           if(i%prime[k]==0)break;
        }
    }

除此之外,还有一种比较神奇的做法:Miller-Rabbin测试
http://blog.csdn.net/sluqy671/article/details/41701655

同余

若a%m=b%m,则称a与B关于模m同余,记为

ab(mod m) a ≡ b ( m o d   m )

性质:
1.自反性: a≡a(mod m)
2.对称性:若 a≡b(mod m),则 b≡a(mod m)
3.传递性:若a≡b(mod m),b≡c(mod m),则 a≡c(mod m)
4.同加性:若a≡b(mod m),则a+c≡b+c(mod m)
5.同乘性:若a≡b(mod m),则a*c≡b*c(mod m)
若a≡b(mod m),c≡d(mod m),则有a*c≡b*d(mod m)
6.同幂性:若a≡b(mod m),则a的n次方≡b的n次方(mod m)
7.若a%p=x,a%q=x,且p,q互质,则a%(p*q)=x
mod运算中加、减、乘均满足分配律,然而 除法没有分配律

剩余系

给定n,则所有整数对n取模,将得到一个集合,称为模n的剩余系,即{0,1,2,……,n-1}。
n的剩余系中与n互质的数称为简化剩余系,也称为缩系。n的剩余系记为Zn,而n的缩系记为Zn*.
模n的剩余系中,每个元素都代表所有与它同余的整数,比如n=7,则1代表{1,8,15,22,……},这个集合满足模n同余关系,称为同余等价类。
剩余系相关定理

1.若a,b互质,则存在一个整数k<b,使得a*k%b=1
2.若a,b互质,则b的缩系中的元素乘以a再模b,仍然得到缩系中的元素所有元素。
3.若a,b互质,则c1=k1*a,c2=k2*a,若c1%b==c2%b,则必有k1%b==k2%b。(因子与模数互质,等式两边可以消去因子。)
4.对于任意正整数n,n的缩系中的元素的乘积模n要么等于1,要么等于n-1。(根据1和2可证)

威尔逊定理

若p为素数,则(p-1)!≡-1(mod p)。
其逆定理也成立。

证明:对于p的缩系中的任何一个元素,必存在一个唯一的元素与之配对,使得其乘积为1。
只有1和p-1是自己和自己配对,其他都是两两配对。
所以得证。
若p为合数,则(p-1)!与p必定不互质,所以(p-1)!%p不可能等于-1。(模p时-1即为p-1,而p-1与p是互质的。)
所以其逆定理得证。

费马小定理

若P为素数,a为正整数,且a和P互质,则有:
ap-1≡1(mod p)

证明:只需证明ap-1(p-1)!=(p-1)!(mod p)即可。
根据剩余系相关定理2,即可证明。

欧拉函数

欧拉函数φ :不超过n的且与n互质的正整数的个数。
如果n为素数p,则φ(p)=p-1
如果n为素数p的幂次pa,则φ(pa)=(p-1)*pa-1.
欧拉函数为积性函数:如果n为任意两个互质的数a、b的积,则 φ(n)= φ(a)*φ(b)
若n=p1a1*p2a2*……*pkak (本来想打p1的a1次方,将就着看吧)
则φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pk)
欧拉定理:
若a与m互质,则

aϕ(m)1(mod m) a ϕ ( m ) ≡ 1 ( m o d   m )

证明:将等式两边乘上缩系中所有元素的乘积,根据引理2即可得证。

扩展欧几里得算法

说明

对于任意整数a,b,一定存在整数x、y,使得ax+by=gcd(a,b)
若gcd(a,b)=1,则一定存在整数x,y,使得ax+by=1
可以使用扩展欧几里德算法求出x,y。
因为ax+by=gcd(a,b)=gcd(b,a%b)=bx’+(a%b)*y’
所以ax+by=bx’+(a-a/b*b)y’
因为上式对于任意a,b(b!=0)都成立,所以可以将a,b看做变量,将x,y,x’,y’等看做系数。左边a的系数应该等于右边a的系数,所以x=y’
左边b的系数应该等于右边b的系数,所以y=x’-(a/b)*y’
可以递归下去,直到a%b=0时,可求得x’=1,y’=0,然后层层返回即可求出原来的x和y。

代码

void gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
    if(!b){x=1;d=a;y=0;}
    else {
             gcd(b,a%b,d,y,x);
             y-=x*(a/b);
          }
}
//x即为a关于模b的逆元

应用

1.求二元一次方程:ax+by=c
2.求模线性方程:ax≡b (mod n)
3.求逆元:ab≡1 (mod n)
4.求gcd(a,b)

模线性方程组

x≡b1 (mod n1)
x≡b2 (mod n2)
……
x≡bk (mod nk)
其中n1,n2,……,nk互质。
这样的方程组称为模线性方程组

中国剩余定理

中国剩余定理就是用来解模线性方程组的
对于n1,因为它与(n2n3……nk)互质,我们可以找到一个系数z1,使得z1n2n3……nk%n1=1。设z1n2n3……nk为c1.
同理,对于每个nk,都可以找到一个zi,使得(zin1n2……nj|j!=i)%ni=1,设(zin1n2……nj|j!=i)为ci
则x=b1*c1+b2*c2+……bk*ck+m(n1*n2*…*nk) 其中m为任意整数。
x为一组解

逆元

如果(ab)%n=1,则a、b互为对方关于模n的逆元。
若a是b关于模n的逆元,则(c/b)%n=(ca)%n=(c%n)(a%n),由此可弥补除法没有分配律的缺陷。
若a与n互质,则必存在一个整数b,使得a*b%n=1,即a模n的逆元一定存在。
若b存在逆元,则有(a/b)%n=(a*b-1)%n。
证明:设b的逆元为c,则bc%n=1
(a/b)%n=((a/b)bc)%n=ac%n=ab-1%n

加法原理

略,请自行百度

乘法原理

略,请自行百度

排列组合

从n个数中取出k个数并进行无重排列的总数,得到的就是排列数
记为A(n,k)或P(n,k)
从n个数中取出k个数的方案数,得到的就是组合数
组合数有如下性质

性质1:C(n,0)=1
性质2:C(n,k)=C(n,n-k)
性质3:C(n,k)+C(n,k+1)=C(n+1,k+1)//所以可以用来递推求组合数

第一类Stirling数

第一类Stirling数表示表示将 n 个不同元素构成m个圆排列的数目
考虑其定义:如果要将n+1元素构成m个圆排列,考虑第n+1个元素:
(1)如果n个元素构成了m-1个圆排列,那么第n+1个元素独自构成一个圆排列。方案数:s(n,m-1)
(2)如果n个元素构成了m个圆排列,将第n+1个元素插入到任意元素的左边。方案数:n*s(n,m)
综上,

s(n+1,m)=s(n,m-1)+n*s(n,m)

第二类Stirling数

第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数
考虑第n+1个元素:
(1)如果n个元素构成了m-1个集合,那么第n+1个元素单独构成一个集合。方案数S(n,m-1)。
(2)如果n个元素已经构成了m个集合,将第n+1个元素插入到任意一个集合。方案数 m*S(n,m) 。
综上,

S(n+1,m)=S(n,m-1)+m*S(n,m)

2333

由欧拉定理可得
aZ,mZ+ a ∈ Z , m ∈ Z + 且(a,m)=1,则 aϕ(m)1(mod m) a ϕ ( m ) ≡ 1 ( m o d   m )
然后可以有以下定义
aZ,mZ+ a ∈ Z , m ∈ Z + 且(a,m)=1,如果l是使 al1(mod m) a l ≡ 1 ( m o d   m ) 成立的最小正整数,则称l为a关于模m的阶,记为 ordma o r d m a

除此之外关于阶还有一些定理

定理1
ordma=l o r d m a = l ,整数 n0 n ≥ 0 ,则 an1(mod m) a n ≡ 1 ( m o d   m ) 当且仅当 ln l ∣ n .特别地, lϕ(m) l ∣ ϕ ( m )
定理2
ordma=l o r d m a = l ,i和j为非负整数,则 aiaj(mod m) a i ≡ a j ( m o d   m ) 当且仅当 ij(mod m) i ≡ j ( m o d   m )
推论1
ordma=l, o r d m a = l , 1,a,a2,,al1 1 , a , a 2 , ⋯ , a l − 1 关于模m两两互不同余
定理3
如果 ordma=l,sZ+ o r d m a = l , s ∈ Z + 那么, ordmas=l(s,l) o r d m a s = l ( s , l )
推论2
ordma=l o r d m a = l ,令 S={as(s,l)=1,1sl} S = { a s ∣ ( s , l ) = 1 , 1 ≤ s ≤ l } ,则 |S|=ϕ(l) | S | = ϕ ( l ) ,且对任意 bS b ∈ S ,都有 ordmb=l o r d m b = l
定理4
设p是素数, aZ a ∈ Z 使得 ordpa=l o r d p a = l ,那么有且仅有 ϕl ϕ l 个关于模p的阶为l,且两两互不同余的数.
定理5
设p是素数, l|p1 l | p − 1 ,则存在 ϕ(l) ϕ ( l ) 个关于模p的阶为l且两两互不同余的数

原根

mZ+(a,m)=1,ordmg=ϕ m ∈ Z + , ( a , m ) = 1 , 且 o r d m g = ϕ (m),则称g为m的一个原根

以下是一些定理

定理1
设整数m>1,若m有原根,则m必为以下数之一: 2,4,pα,2pαpα 2 , 4 , p α , 2 p α , 其 中 p 为 奇 素 数 , α 为 正 整 数 。 反 之 也 成 立 。
定理2
若g是m的原根,则 S={gs|1sϕ(m),(s,phi(m))=1} S = { g s | 1 ≤ s ≤ ϕ ( m ) , ( s , p h i ( m ) ) = 1 } 给出了m的所有原根。
因此,m有 ϕ(ϕ(m)) ϕ ( ϕ ( m ) ) 个原根
定理3
m>2(g,m)=1ϕ(m)=pα11pα22pαkk,gm1ik 对 于 整 数 m > 2 , ( g , m ) = 1 , ϕ ( m ) = p 1 α 1 p 2 α 2 ⋯ p k α k , 则 g 为 m 的 原 根 当 且 仅 当 对 于 ∀ 1 ≤ i ≤ k 有 :

gϕ(m)pi≢1(mod m) g ϕ ( m ) p i ≢ 1 ( m o d   m )

离散对数

mg(a,m)=1,0x<ϕ(m)使 设 正 整 数 m 有 原 根 g , 则 对 ∀ ( a , m ) = 1 , 存 在 唯 一 的 整 数 0 ≤ x < ϕ ( m ) 使 得

gxa(mod m) g x ≡ a ( m o d   m )

xmga 则 称 x 为 模 m 以 g 为 底 a 的 离散对数,记作 x=logga x = l o g g a

具体求离散对数的算法见下
https://blog.csdn.net/qq_34454069/article/details/79672866

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值