今天真是要死的一天,数论学的头疼,感觉好多东西学起来很生疏,找不到节奏感,算了废话不多说;
扩展欧几里得
首先说扩展欧几里得的作用,可以用来求一个数的逆元,以及解特定的二元一次方程的解;
具体内容:
int exgcd(int a,int b,int &x,int &y)//特别注意x和y一定是参引入,否则在回溯时不能改变,导致不能求解;
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=exgecd(b,a%b,x,y);
int t=y;
y=x-(a/b)*y;
x=t;
return r;
}
在经过这一番回溯变化后,得到了x,y的一个特殊解,然后我们可以通过这个特殊解来解除a的逆元
公式是a的逆=(x+m)%m;m就是b、参数里的b;
然后感觉这个就没什么好讲的了,有什么新的知识点,在以后碰见了继续补充;
高精度求模
在处理分子很大时,可以考虑的一个方式,要点是把要处理的分子当成string来处理;
代码
int high(string s,const int &mod)//有关这个const int &mod,在我看的一本书上说,这样可以提高效率,至于原因我也记得不是很清楚;
{
int ans=0;
for(int i=0;i,s.size();i++)
{
ans=(ans*10+s[i]-'0')%mod;//可以看出,大数取模就是同余定理的推广使用
}
return ans;
}
同余定理
就是说一个数a和b如果(a-b)%mod==0 ,那么就说a和b对于mod同余记为a≡b(mod m),也就是说,a,b分别对mod的求模值一样。
表述:
(a+b)%