acm数论!.docx

acm数论!.docx

ID:48973857

大小:27.89 KB

页数:26页

时间:2020-02-26

acm数论!.docx_第1页
acm数论!.docx_第2页
acm数论!.docx_第3页
acm数论!.docx_第4页
acm数论!.docx_第5页
资源描述:

《acm数论!.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ACM数论基本模板1.欧几里得求最大公约数,最小公倍数(1)递归的写法:intgcd(inta,intb){returnb?gcd(b,a%b):a;}(2)辗转相除法:intgcd(inta,intb){ if(a

2、na; if((a&1)==0&&(b&1)==0)return2*stein(a>>1,b>>1);//aandbareeven   if((a&1)==0)return stein(a>>1,b);  //onlyais even     if((b&1)==0)return stein(a,b>>1);  //onlybis even      return   stein((a+b)>>1,(a-b)>>1);  //aandbareodd}最小公倍数:intlcm(inta,intb){return

3、a/gcd(a,b)*b;}2.扩展欧几里得求ax=b(modm)ax+my=b如果r=gcd(a,m)且b%r==0,则同余方程有解,其最小解为x*(b/r);ax+by=c如r=gcd(a,b),则存在x,y,使xa+yb=r;当x+=b,y-=a后仍然成立        因为xa+yb+ab-ab=r;==>(x+b)a+(y-a)b=rintexgcd(inta,intb,int&x,int&y){ if(b==0){x=1;y=0;returna;} intr=exgcd(b,a%b,y,x); y

4、-=x*(a/b); returnr;}3.素数判定(1)试除法:bool isprime(intn){ inti; for(i=2;i<=(int)sqrt(n*1.0);i++)   if(n%i==0)  return false; return true;}boolisprime(intn){ if(n==2)returntrue; if(n==1

5、

6、(n&1)==0) returnfalse; for(inti=3;i*i<=n;i+=2)  if(n%i==0)returnfals; return

7、true;}(2)miller-rabin算法boolwitness(i64a,i64n){ i64x,d=1,i=ceil(log(n-1.0)/log(2.0))-1; for(;i>=0;i--) {   x=d;d=(d*d)%n;   if(d==1&&x!=1&&x!=n-1)return1;   if(((n-1)&(1<0)d=(d*a)%n; } return d==1?0:1;}boolmiller_rabin(i64n){ if(n==2)  return1; if(n==1

8、

9、

10、(n&1)==0)return0; i64j,a; for(j=0;j<50;j++) {  a=rand()*(n-2)/RAND_MAX+1;  if(witness(a,n))return0; } return1;}另一种写法,更好理解 boolwitness(i64a,i64n){ inti,j=0; i64m=n-1,x,y; while(m%2==0) { m>>=1; j++; } x=pow(a,m,n);///快速幂取模 for(i=1;i<=j;i++) { y=pow(x,2,n); 

11、if(y==1&&x!=1&&x!=n-1)returntrue; x=y; } returny==1?false:true;}boolmiller_rabin(i64n){ if(n==2)returntrue; if(n==1

12、

13、n%2==0)returnfalse; for(inti=1;i<=10;i++) { i64a=rand()%(n-1)+1; if(witness(a,n))returnfalse; } returntrue;} 4.素数筛法  //前17个素数prime[18]={17,2

14、,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59}boolf[100002];//保存判断是否是素数的结果,p[i]=1是素数,p[i]=0则不是素数intprime[78499];//保存素数prime[0]为素数的个数voidPRIME(intM){ inti,i2,k; for(i=0;i<=M;i+=2)f[i]=0; for(i=1;i<=M;i+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。