信息学之数学基.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学之数学基

第一章 有关数论的算法 HYPERLINK file:///C:\\Documents%20and%20Settings\\Administrator\\Local%20Settings\\Temp\\40.htm \l p22#p22 1.1 最大公约数与最小公倍数 HYPERLINK file:///C:\\Documents%20and%20Settings\\Administrator\\Local%20Settings\\Temp\\40.htm \l p#p 1.2 有关素数的算法 HYPERLINK file:///C:\\Documents%20and%20Settings\\Administrator\\Local%20Settings\\Temp\\40.htm \l p24#p24 1.3 方程ax+by=c的整数解及应用 HYPERLINK file:///C:\\Documents%20and%20Settings\\Administrator\\Local%20Settings\\Temp\\40.htm \l p25#p25 1.4 求a^b mod n 1.1最大公约数与最小公倍数 1.算法1: 欧几里德算法求a,b的最大公约数? function gcd(a,b:longint):longint; ?begin ?if b=0 then gcdd:=a ?else gcd:=gcd(b,a mod b); ?end; 2.算法2:最小公倍数acm=a*b div gcd(a,b); 3.算法3:扩展的欧几里德算法,求出gcd(a,b)和满足gcd(a,b)=ax+by的整数x和y? function exgcd(a,b:longint;var x,y:longint):longint; var t:longint; begin if b=0 then? ?begin ? result:=a; ? x:=1; ? y:=0; ?end else ?begin ?result:=exgcd(b,a mod b,x,y); ?t:=x; ?x:=y; ?y:=t-(a div b)*y; ?end; end; (理论依据:gcd(a,b)=ax+by=bx1+(a mod b)y1=bx1+(a-(a div b)*b)y1=ay1+b(x1-(a div b)*y1)) 1. 2有关素数的算法 1.算法4:求前n个素数: program BasicMath_Prime; const maxn=1000; var pnum,n:longint;? p:array[1..maxn] of longint; function IsPrime(x:longint):boolean; var i:integer; begin for i:=1 to pnum do ?if sqr(p[i])=x then ? begin ?? if x mod p[i]=0 then ???? begin ????? IsPrime:=false; ?????? exit; ???? end; ?end? ?else ? begin ?? IsPrime:=true; ?? exit; ?end; IsPrime:=true; end; procedure main; var x:longint; begin pnum:=0; x:=1; while(pnumn) do begin ?inc(x); ?if IsPrime(x) then ? begin ?? inc(pnum); ?? p[pnum]:=x; ? end; end; end; procedure out; var i,t:integer; begin for i:=1 to n do ?begin ?write(p[i]:5);t:=t+1; ?if t mod 10=0 then writeln; ?end; end; begin readln(n); main; out; end. 2.算法5:求不大于n的所有素数 program sushu3; const maxn=10000; var i,k,n:integer; a:array[1..maxn] of integer; begin readln(n); for i:=1 to n do a[i]:=i; a[1]:=0; i:=2; while in do begin ?k:=2*i; ?while k=n do ? begin ? a[k]:=0; ? k:=k+i; ? end; ?i:=i+1; ?while (a[i]=0) and (in) do i:=i+1; end;

文档评论(0)

泰山之颠 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档