noip数学

一、取模运算

(1)定义

给定一个正整数p和一个整数n 一定存在此等式 n=k*p+r;其中k,r是整数,r大于等于0小于p

称k是n除以p的商,r为n除以p的余数

说明:同余式 正整数a,b对p取模,它们的余数相同 记作 a≡b (mod p)

          整数分为p个等价类,称为模p的剩余类

          n%p所得结果的正负由n决定,与p无关。如:7%4=3,-7%4=-3,-7%-4=-3;

(2)基本性质

若p|(a-b),则a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)

传递性:a≡b (% p),b≡c (% p),则a≡c (% p)

对称性:a≡b (% p)等价于b≡a (% p)

(3)运算规则

(a+b)%p=(a%p+b%p)%p

  (a-b)  %p=(a%p-b%p+p)%p //一定+p

  (a*b)%p=(a%p*b%p)%p //可能会爆long long 快速乘

结合律:((a+b)%p+c)%p=(a+(b+c)%p)%p

交换律:((a+b)%p*c)=(a*c%p+b*c%p)%p

(4)重要定理:

如果a≡b (% p),则

(a+c)≡(b+c) (% p),(a*c)≡(b*c) (% p)//c是任意的

若a≡b (% p),c≡d (% p),则a+c≡b+d (% p),a-c≡b-d (% p),a*c≡b*d (% p),a/c≡b/d(% p)

(5)代码实现

//同余方程求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解 
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,x,y;
int gcd(int a,int b,int &x,int &y)
{
    if(!b){
        x=1;
        y=0;
        return a;
    }
    int ans=gcd(b,a%b,y,x);
    y-=(a/b)*x;
    return ans;
}
int  main()
{
    scanf("%d%d",&a,&b);
    gcd(a,b,x,y);
    while(x<=0)x+=b;
    printf("%d\n",x);
    return 0;
}

二、乘法逆元

(a/b)%p=???

为了方便讨论,我们只讨论正整数群上的乘法逆元。

(1)定义:

若存在正整数a,b,p,满足a*b≡1(% p),则称a是b的乘法逆元或者称b是a的乘法逆元。

在mod 7意义下,3的乘法逆元是5,在mod 6意义下2的乘法逆元是多少呢??

在mod 6意义下不存在2的乘法逆元

(2)乘法逆元存在性定理

对于ab≡1(% p),如果a与p互质,则一定存在一个正整数b满足b<p,否则不存在。

证明:对于上述同余方程,可得,ab-pk=1。对于ax+by=z,只有当z是gcd(a,b)的倍数时才有解。

所以gcd(a,p)=1,所以a,p互质时才存在b

(3)求乘法逆元

欧拉定理 费马小定理 扩展欧几里得 线性求逆元

三、欧拉函数

(1)定义

欧拉函数φ(n)表示小于等于n且与n互质的正整数的个数

特别的φ(1)=1。欧拉函数是积性函数

(2)欧拉函数公式

令n=Π(i=1-k)pi的ci次方为n的质因子分解式,则有

φ(n)=n*Π(i=1--k)(pi-1)/pi

(3)性质

a、若p为质数,则φ(p)=p-1

     证明:代公式。

b、若p为质数,则φ(p^k)=(p-1)*(p^(k-1))

     证明:若p是质数,在p^k内只有p的倍数不与p^k互质,p的倍数有p^k/p=p^(k-1)次方个。

      则,φ(p^k)=p^k-p^(k-1)=(p-1)*p^(k-1)

c、欧拉函数是积性函数,若n,m互质,则φ(nm)=φ(n)φ(m)

d、当n是奇数时,φ(2n)=φ(2)*φ(n)=φ(n),因为此时2与n互质,满足c性质

e、若n>2,则φ(n)为偶数

     证明:

     ①当n是质数时,φ(n)=n-1,因为n是大于2的质数,所以n一定是奇数,n-1一定是偶数

     ②当n是合数时,

f、当n>1时,1--n与n互质的数的和为 n*φ(n)/2

(4)欧拉定理

a^(φ(p))≡1(mod p) 对任意互质的a,p都成立

a*a^(φ(p)-1)≡1(mod p) ,然后用快速幂求乘法逆元

四、费马小定理

对于任意互质的a,p(p为质数恒成立)

a^(p-1)≡1(mod p)

费马小定理是欧拉定理在p为质数时的推论,用于降低题目难度,竞赛中常见的质数998244353,1000000009

五、欧几里得算法及扩展

(1)欧几里得算法

gcd(a,b)=gcd(b,a%b).O(logn)求两个数的最大公约数

 (2)扩展欧几里得算法

扩展欧几里得用于求形如 ax+by=gcd(a,b)的一组解,保证求出的解|x|+|y|最小。

求解过程:

由ax+by=gcd(a,b)得出另一个式子,bx'+a%by'=gcd(b,a%b),

由于gcd(a,b)=gcd(b,a%b),

所以ax+by=bx'+a%by'

       ax+by=bx'+(a-a/b*b)y'

       ax+by=bx'+ay'-a/b*by'

       ax+by=b(x'-a/by')+ay'

所以 x=y',y=x'-a/by'。
所以这个方程的x,y可以由我们构造的方程求出,这样递归下去求解。

递归边界,b=0时,此时,ax+0*y=a。所以到边界时a=1,b为任意值。(代码上b=0的,试了一下任何值都可以)

代码实现:

void exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1;y=0;
        return;
    }
    ecgcd(b,a%b,x,y);
    int t=x;x=y;y=t-a/b*y;
}

(3)扩展欧几里得求逆元

由ab≡1(% p)

则ab-k*p=1,若gcd(a,p)=1则存在b为a的逆元。

复杂度O(logn)

六、线性筛素数

(1)引入

在之前的埃拉托色尼筛素数的方法中,16这个数被2,4,8筛掉,发现一个数被多个数筛掉很不划算。

那么怎样让一个数被只被一个数筛去呢?我们可以保证每个数只被它最小的质因子筛掉。时间复杂度O(n)

(2)理解

首先推荐一篇论文,很好理解。我就不赘述。

(3)代码实现

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,cnt,check[100],prime[100];
void Prime(int n)
{
    check[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(!check[i])
        prime[++cnt]=i;
        for(int j=1;j<=cnt&&i*prime[j]<=n;j++)
        {
            check[i*prime[j]]=1;
            if(i%prime[j]==0)break;
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    Prime(n);
    for(int i=1;i<=m;i++)
    {
        scanf("%d",&x);
        if(!check[x])printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

七、数论函数

(1)定义

a、定义域为正整数,陪域为复数的函数称为数论函数。(对于陪域和复数的概念我不理解)

b、积性函数 对于所有互质的正整数a,b满足f(a*b)=f(a)*f(b),完全积性函数是对于所有的正整数a,b都满足上式。

(2)常见的数论函数

1、对于任意正整数x,函数值均为1

e、对于正整数x,若x=1,函数值为1,否则为0

n、对于任意正整数x函数值均为x

以上为完全积性函数。

d:对于任意正整数x,函数值为它的正因子个数

φ:对于正整数x,函数值为小于等于它且与它互质的正整数的个数

μ:对于正整数x,设正整数x的质因子分解为 x=累乘i=1--k ai^pi,若存在pi≥2则函数值

为0,否则为(-1)^k,特殊的μ(1)=1

以上为积性函数。

 八、莫比乌斯反演(没补全)

(1)引入

设,有F(n)=sigma[f(d)],d|n。

例如:

F(1)=f(1)

F(2)=f(1)+f(2)

F(3)=f(1)+f(3)

F(4)=f(1)+f(2)+f(4)

F(5)=f(1)+f(5)

F(6)=f(1)+f(2)+f(3)+f(6)

F(7)=f(1)+f(7)

F(8)=f(1)+f(2)+f(4)+f(8)

可求得:

f(1)=F(1)

f(2)=F(2)-F(1)

f(3)=F(3)-F(1)

f(4)=F(4)-F(2)

f(5)=F(5)-F(1)

f(6)=F(6)-F(3)-F(2)+F(1)

f(7)=F(7)-F(1)

f(8)=F(8)-F(4)

发现了什么??

F(n)=sigma[f(d)]   =》f(n)=sigma[u(d)*F(n/d)], d|n

其中μ(d)为莫比乌斯函数,给出的定义如下。

当d=1时,μ(d)=1

当d=p1*p2*p3...*pr时,μ(d)=(-1)^r,其中pi是互不相同的素数

其他情况μ(d)=0

(2)莫比乌斯函数的性质

①莫比乌斯函数是积性函数,积性函数的性质,a、f(1)=1,b、积性函数的前缀和也是积性函数。

九、BSGS

求解形如 x ^y ≡ z(mod p) 中 y 的取值的算法.

设y=km+i则原同余式为x^km+i ≡ z(mod p)=》x^i≡z*x^(-km)

Baby Step:x^i可以预处理扔进一个map

Gaint Step: 枚举k,查找是否存在z*x^(-km)

十、杨辉三角

(1)引入

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。杨辉三角形同时对应于二项式定理的系数。

(2)杨辉三角

(3)性质

a、每个数等于它上方两数之和

b、每行数字左右对称,由1开始逐渐变大

c、第n行的数字有n项

d、第n行的数字和为2^(n-1)

e、第n行的m个数可表示为C(n-1,m-1),即从n-1个不同元素中取出m-1个元素的组合数

补充:

 

f、第n行的第m个数与第n-m+1个数相等

g、每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)

....

(4)应用

 十一、质因数分解定理

(1)任何一个大于1的自然数n,如果n不为质数,那么n可以被唯一分解为有限个质数的乘积的形式,

N=P1a1P2a2P3a3......Pnan,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。这样的分解称为 的标准分解式

(2)一个大于1的正整数N,如果它的标准分解式为:  ,那么它的正因数个数为

  
 
 
(3) 它的全体正因数之和
 

 

, 并证明
 

 有待更新//...

 

posted @ 2017-08-24 10:02  ANhour  阅读(1122)  评论(0编辑  收藏  举报