acm数论!.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
acm数论!

ACM 数论基本模板1.欧几里得求最大公约数,最小公倍数(1)递归的写法:int gcd(int a,int b) {return b?gcd(b,a%b):a;}(2)辗转相除法:int gcd(int a,int b){?if(ab)??? return gcd(b,a);?int r;?while(b) {r=a%b;a=b;b=r;}?return a;}(3)stein+欧几里得快速求解大数的最大公约数i64 stein(i64 a,i64 b){??if(ab)?? return stein(b,a);?if(b==0) return a;?if((a1)==0(b1)==0) return 2*stein(a1,b1);//a and b are even???if((a1)==0) return? stein(a1,b);?? // only a is? even?????if((b1)==0) return? stein(a,b1);?? // only b is? even??????return??? stein((a+b)1,(a-b)1);?? // a and b are odd}最小公倍数: int lcm(int a,int b) {return a/gcd(a,b)*b;}2.扩展欧几里得求ax=b (mod m) 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=rint exgcd(int a,int b,int x,int y){?if(b==0) {x=1;y=0;return a;}?int r=exgcd(b,a%b,y,x);?y-=x*(a/b);?return r;}3.素数判定(1)试除法:bool? isprime(int n){?int i;?for(i=2;i=(int)sqrt(n*1.0);i++)? ?? if(n%i==0) ? ?return? false;?return? true;}bool isprime(int n){?if(n==2) return true;?if(n==1||(n1)==0) ?return false;?for(int i=3;i*i=n;i+=2)?? if(n%i==0) return fals;?return true;}(2)miller-rabin 算法bool witness(i64 a,i64 n){? i64 x,d=1,i=ceil(log(n-1.0)/log(2.0))-1;? for(;i=0;i--)? {??? x=d; d=(d*d)%n;??? if(d==1x!=1x!=n-1) return 1;??? if(((n-1)(1i))0) d=(d*a)%n;? }? return? d==1?0:1;}bool miller_rabin(i64 n){? if(n==2)?? return 1;? if(n==1||(n1)==0) return 0;? i64 j,a;? for(j=0;j50;j++)? {?? a=rand()*(n-2)/RAND_MAX+1;?? if(witness(a,n)) return 0;? }? return 1;}另一种写法,更好理解?bool witness(i64 a,i64 n){?int i,j=0;?i64 m=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);? if(y==1x!=1x!=n-1) return true;? x=y;?}?return y==1?false:true;}bool miller_rabin(i64 n){?if(n==2) return true;?if(n==1||n%2==0) return false;?for(int i=1;i=10;i++)?{? i64 a=rand()%(n-1)+1;? if(witness(a,n)) return false;?}?return true;}?4.素数筛法?? //前17个素数 prime[18]={17,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59}bool f[100002];//保存判断是否是素数的结果,p[i]=1 是素数,p[i]=0

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档