2017.10.22

来源:互联网 发布:知之一字众妙之门 编辑:程序博客网 时间:2024/05/22 06:50

虽然专题快结束了,但是我还是先做的数学。就是找了几个题补了一下,有的题目刚开始就是做一些稍微水一点的,我就简要总结不写题解。poj上的private roots,这是个欧拉函数的题,就是给出一个奇素数,求出他的原根的个数。对于给出的素数p,p的元根必然是存在的,并且模的原根的个数为φ(p−1),如果{xi%p| 1 <= i <= p - 1} = {1,2,…,p-1},则称x是p的原根,原根个数为phi(phi(p)), 由于phi(p)=p-1, 所以为phi(p-1),讲的可能不太清楚。还有一个POJ的Relatives,这也是一个欧拉函数,这个题就是用来熟练的,求一个整数的函数值,类似于模板题用来理解记忆。再有就是拓展欧几里德a*x+b*y=gcd(a,b),一个很经典的题目,青蛙的约会,同样利用gcd(a,b)==gcd(b,a%b)把a*x+b*y==gcd( a, b )转化为b*x’+(a%b)*y’==gcd( b, a%b ),这个地方的转化好像用的挺多的我就记下来了。
这个是模板

int ex_gcd(int a,int b,int &x,int &y){    if (b==0){        x=1,y=0;        return a;    }    int q=gcd(b,a%b,y,x);    y-=a/b*x;    return q;}

设a=m-n,b=L,c=y-x,然后套用模板求出特解t的值,注意t>0,所以要用通解公式得出最小正整数,这个地方就是一个基本公式来回推。再有POJ的Strange Way to Express Integers,就是求解方程组

X%m1=r1

X%m2=r2

….

X%mn=rn
然后
X%m1=r1

X%m2=r2

联立可得

m1*x+m2*y=r2-r1

用ex_gcd求得一个特解x’,得到X=x’*m1+r2,X的通解,X’=X+k*LCM(m1,m2),上式可化为:X’%LCM(m1,m2)=X,做后求出X‘即可。我还得把那个中国剩余定理补完,这个和exgcd有关联,刚开始做数学就是有的人的题解会有一些我没见过的名词,我老是想查查看看,但是有时候概念比较难懂理解了也没什么特别的用处,可是真的费时间,还得有点分寸不能看概念就没完了。主要还是巩固和看新的,还有就是规律思维题,有空就补两个,感觉还行。

原创粉丝点击