第一周训练总结

 

这一星期感觉学到不少东西,对于慢热型的我来说,距离熟练应用还是有一段距离。

不知道怎么回事,明明发布博客成功再次查看却少了后大半段,又重新写了后半部分,今天诸事不宜啊.......

还有20天左右就放假了哈哈哈,希望这些天里可以学到很多东西。

首先接触到了整除和同余、扩展欧几里得问题,后来又看了中国剩余定理、母函数、卡特兰数、斐波那契数列、组合数学等。

1.整除问题一部分是要自己推演发现规律,平时要多积累经验;

还了解到ax+by=c有整数解的充要条件是gcd(a,b)可以整除c,即c%gcd=0;若一组解(可通过扩展欧几里得求出)为x0,y0,

扩展欧几里得

则所有整数解为x=x0+b/gcd(a,b)*t,y=y0-a/gcd(a,b)*t。其中t为整数。

2.同余问题常见一个形式是a☰b(mod m)意义为a-b=m*k。

这一节里学到了快速幂和快速积及取模代码,素数高效筛法和类似筛选素数的算法也得到了巩固。

快速积快速幂

3.最大公约数gcd 部分代码 y==0?x:gcd(y,x%y);

可以通过不断去除因子2来改进gcd算法。

4.扩展欧几里得用来求ax+by=GCD(a,b);已知a,b求一组x0,y0;

在一组方程ax+by=c中,它相当于ax☰c(mod  b)有整数解的充要条件是c%GCD(a,b)=0;

例如以前见到的一道ax☰1(mod b)的题,让求出最小的正整数x,就可以利用欧几里得扩展算法来算出一个x,进而利用(x%t+t)%t

来求出最小x。其中t=b/GCD(a,b)。

5.中国剩余定理,用来求解模线性方程组解。

x☰a[1]mod w[1];

x☰a[2]mod w[2];

x☰a[3]mod w[3];

.................

其中w,a数组已知,且w[i]与w[j]互质,求x。

就用到中国剩余定理。方程组有整数解。并且在模M=m1*m2*……*mk下的解是唯一的,解为: 
这里写图片描述 
其中Mi=M/m[i],而Mi^-1为Mi模m[i]的逆元。

那么逆元怎么求呢?就要用到扩展欧几里得算法

exgcd(w[i],m,x,y)得到的y就是其逆元,具体代码参考:https://blog.csdn.net/lanshan1111/article/details/81332509

6.斐波那契数列,其通式为(m^n-s^n)/sqrt(5)

m=(1+sqrt(5))/2,n=(1-sqrt(5))/2。但是编程时这个n在50以上时就爆了,还是用递推公式。

7.卡特兰数  1,2,5,14,42,132,429....................

通式1为   ∑(0->n-1)f(i)*f(n-i-1)

通式2为   f(n-1)*(4*n-2)/(n+1)

通式3为   c(2n,n)/(n+1)

通式4为   c(2n,n)-c(2n,n-1)

求c(m,n)伪代码

int s1=1;
    int s2=1;
    for(int i=1;i<=m;i++)
    {
        s1*=(n-i+1);
        s2*=i;
    }
    return s1/s2;

8.素数判断,包括穷举法、高效筛法及素数测试

代码

9.欧拉定理

欧拉函数是指:小于等于n的数中与n互质的数的数目。

常用性质有:

n为一个素数p,则phi[p]=p-1;

n为一个素数的p的p^a,则,phi[p^a]=(p-1)*p^(a-1)

若n为两个互质数的积,phi[n]=phi[a]*phi[b];

10.欧拉筛法

欧拉筛法及函数

欧拉筛法可以同时判断素数和求出欧拉函数的值。

三个性质:

p为质数:

phi[p]=p-1;

若i%p==0

phi[i*p]=p*phi[i]

若i%p!=0

则phi[i*p]=(p-1)*phi[i]

一星期训练结束了,可是距离熟练应用还是有很长的距离。向身边的人学习吧,多努力一些。还是那句话,既然做了就好好做。

你可能感兴趣的:(第一周训练总结)