Maple
Son bon usage en mathématiques
Philippe Dumas, Xavier Gourdon
Springer-Verlag, 1997
Code Maple du Chapitre 1, Livre second.
# section 1, page 109. r[0]:=15: r[0]:=x^15-1: r[1]:=9: r[1]:=x^9-1: for k while r[k]<>0 do for k while r[k]<>0 do r[k+1]:=irem(r[k-1],r[k]) r[k+1]:=rem(r[k-1],r[k],x) od: od: r[k-1]; r[k-1]; igcd(15,9),gcd(x^15-1,x^6-1); seq(ifactor(2^(2^k)+1),k=1..6); igcdex(15,9,u,v),u,v; gcdex(x^3-4,x^4+x^2+1,x,'u','v'),u,v; a:=100: p:=ithprime(100): igcdex(a,p,'u','v'),u,v; a^(-1) mod p; # exercice 1.7, page 114. m:=6: for x from 0 to m-1 do for y from 0 to m-1 do A[x,y]:=x+y mod m od od: array(1..2,1..2, [[cat(`+ mod `,m),matrix(1,m,[seq(i,i=0..m-1)])], [matrix(m,1,[seq(j,j=0..m-1)]), matrix(m,m,[seq(seq(A[i,j],j=0..m-1),i=0..m-1)])]]); # fin exercice 1.7. p:=7: seq(binomial(p,k),k=0..p) # exercice 1.8, page 116. readlib(`plot/color`): print(`plot/colortable`); # fin exercice 1.8. f:=x^10/(x^5-1)/(x^2+x+1); convert(f,parfrac,x); dec:=convert(f,fullparfrac,x); unlikely:=proc(s) local sf; if has(s,Sum) then if op(0,s)=Sum and has(op(2,s),RootOf) then add(sf,sf={allvalues(subs(op(2,s),op(1,s)))}) else map(unlikely,s) fi else s fi end: # unlikely unlikely(dec): map(radnormal,"); # exercice 1.11, page 120. r:=1/factorial(8): convert(r,iparfrac); lprint(ifactor(12)); # fin exercice 1.11. # exercice 1.15, page 122. n:=2^73-1: ifactor(n); p:=nextprime(1000): M:=2^p-1: isprime(M); # fin exercice 1.15. # exercice 1.17, page 123. m[1]:=15: m[2]:=14: a[1]:=2: a[2]:=3: z[1,1]:=a[1]: z[2,1]:=a[2]: for k from 2 while z[1,k-1]<>1 or z[2,k-1]<>1 do z[1,k]:=z[1,k-1]*a[1] mod m[1]; z[2,k]:=z[2,k-1]*a[2] mod m[2] od: seq([z[1,i],z[2,i]],i=1..k-1); k-1; # fin exercice 1.17. # section 3, page 124. # probleme page 124. evalf(333/106,50); decimalexpansion(1/2800,20); nicedecimalexpansion(1/2800); x:=evalf(Pi,50): convert(x,confrac,xx): seq(xx[i],i=1..6); x:=evalf(2^(1/2),50): convert(x,confrac,'xx'): xx; x:=evalf(Pi,50): convert(x,confrac,'xx'): seq(xx[i],i=7..nops(xx)); # fin probleme. # section 4, page 127. # exercice 1.2, page 128. for k to 50 do readlib(ifactors)((10^k-1)/9) od; for k to 50 do if isprime((10^k-1)/9) then print(k) fi od; # fin exercice 1.2. # exercice 1.3, page 128. for n to 20 do factor(x^n-1) od; # fin exercice 1.3. # exercice 1.4, page 128. p[0]:=1: for i while p[i-1]<100 do p[i]:=nextprime(p[i-1]); GIfactorization[i]:=[p[i],GaussInt[GIfactor](p[i])] od: [seq(GIfactorization[i],i=1..25)]: subs(``(-1)=1,``(I)=1,``(-I)=1,"): select(proc(z) evalb(nops(z[2])>1) end,"); # fin exercice 1.4. # exercice 1.6, page 130. isolve(100*x=2+541*k); " mod 541; msolve(100*x=2,541); # fin exercice 1.6. # exercice 1.8, page 131. p:=3: N:=81: a:=[1,1,1]:b:=[0,0,0]: for n from 0 to N do for k from 0 to n do SQ:=[[k,-n],[k,-n-1],[k+1,-n-1],[k+1,-n]]; #1 residue:=binomial(n,k) mod p; t:=evalf(residue/(p-1)); pic[n,k]:=plots[polygonplot](SQ, color=COLOR(RGB,op((1-t)*a+t*b)), #2 view=[-2..N+1,-N-1..2]); od od: pic[text]:=plots[textplot]([seq([-1/2,-n-1/2,convert(n,string)], n=0..N), seq([k+3/4,-k+1/2,convert(k,string)], k=0..N)], font=[TIMES,ROMAN,20]): plots[display]({seq(seq(pic[n,k],k=0..n),n=0..N),pic[text]}, scaling=constrained,axes=none); # fin exercice 1.8. # exercice 1.9, page 132. for i to 10 do p:=ithprime(1+i); z:=2; for j while z<>1 do z:=2*z mod p od; T[i]:=[p,j]; od: seq(T[i],i=1..10); # fin exercice 1.9. # exercice 1.10, page 132. for n from 2 to 20 do counter:=0; for a to n-1 do if igcd(a,n)=1 then counter:=counter+1; G[n,counter]:=a #1 fi od; CardG[n]:=counter; g[n]:=FAIL; for k to CardG[n] while g[n]=FAIL do z:=G[n,k]; for nu while z<>1 do z:=z*G[n,k] mod n od: if nu=CardG[n] then g[n]:=G[n,k] #2 fi; od; od: seq([n,g[n]],n=2..20); for k to CardG[20] do z:=G[20,k]; for nu while z<>1 do z:=z*G[20,k] mod 20 od: NU[20,k]:=nu od: seq([G[20,k],NU[20,k]],k=1..CardG[20]); # fin exercice 1.10. # exercice 1.11, page 133. `convert/iparfrac`:=proc(r::rational) local n,d,f,l,i,p,alpha,m,M,c,E,k; n:=numer(r); d:=denom(r); f:=readlib(ifactors)(d)[2]; #1 l:=nops(f); for i to l do p[i]:=f[i][1]; #2 alpha[i]:=f[i][2]; m[i]:=p[i]^alpha[i]; M[i]:=iquo(d,m[i]); c[i]:=modp((n*M[i]^(-1)),m[i]); E[i]:=convert(c[i],base,p[i]) #3 od; n/d-add(c[i]/m[i],i=1..l)+add(add( #4 E[i][k]/``(p[i])^(alpha[i]-k+1),k=1..nops(E[i])),i=1..l) end: # convert/iparfrac # fin exercice 1.11. # exercice 1.12, page 134. pi:=proc(x::numeric) local T,p,isqrtx,j; if x<2 then RETURN(0) fi; for p from 2 to x do T[p]:=true od; isqrtx:=floor(sqrt(x)); for p from 2 to isqrtx do if T[p] then for j from p*p to x by p do T[j]:=false od fi od; nops(subs(false=NULL,[seq(T[j],j=2..x)])) end: # pi newpi:=proc(x::numeric) local isqrtx,isqrtisqrtx,xoverisqrtx, p,T,counter,j,P,piofisqrtx,i,k; if x<2 then RETURN(0) fi; isqrtx:=floor(sqrt(x)); #0 isqrtisqrtx:=floor(sqrt(isqrtx)); xoverisqrtx:=floor(x/isqrtx); #1 for p from 2 to isqrtx do T[p]:=true od; counter:=0; for p from 2 to isqrtx do if T[p] then counter:=counter+1; P[counter]:=p; for j from p*p to isqrtx by p do T[j]:=false od fi od; piofisqrtx:=counter; #2 for i from 2 to xoverisqrtx+1 do for k to isqrtx do T[k]:=true od; for j to piofisqrtx do for k from P[j]-irem((i-1)*isqrtx,P[j]) to isqrtx by P[j] do T[k]:=false od od; counter:=counter +nops(subs(false=NULL,[seq(T[j],j=1..isqrtx)])); od; counter:=counter #3 -nops(subs(false=NULL,[seq(T[j-xoverisqrtx*isqrtx], j=x+1..(xoverisqrtx+1)*isqrtx)])); counter end: # newpi for i from 2 to 6 do TIME[i]:=time(pi(10^i)) od; for i from 2 to 8 do newTIME[i]:=time(newpi(10^i)) od; pic[pi]:=plot([seq([i,log[10](TIME[i])],i=2..6)]): pic[newpi]:=plot([seq([i,log[10](newTIME[i])],i=2..8)]): plots[display]({pic[pi],pic[newpi]},scaling=constrained); # fin exercice 1.12. # exercice 1.13, page 137. N:=232307310937188460801: p:=igcd(2&^N-2 mod N,N); # fin exercice 1.13. # exercice 1.14, page 137. n:=3*4*5;k:=27; picture[circle]:=plot([cos(t),sin(t),t=0..2*Pi], color=blue): picture[ptset]:=plot([seq([cos(2*j*Pi/n),sin(2*j*Pi/n)],j=0..n)], style=point,symbol=circle,color=blue): picture[polygon]:=plot([seq([cos(2*j*k*Pi/n),sin(2*j*k*Pi/n)], j=0..n)],color=red): plots[display]({picture[circle],picture[ptset],picture[polygon]}, axes=NONE,scaling=constrained); # fin exercice 1.14. # exercice 1.15, page 138. op(select(proc(z) isprime(op(1,z)) and isprime(op(2,z)) end, [seq([n,2^n-1],n=2..100)])); p:=nextprime(1000): M:=2^p-1: for q from 2*p+1 by 2*p while q^2<=M and irem(M,q)<>0 do od: q,isprime(q); # fin exercice 1.15. # exercice 1.16, page 138. m[1]:=4*7:m[2]:=3^2*5: x[1]:=12:x[2]:=17: isolve({xx=x[1]+k[1]*m[1],xx=x[2]+k[2]*m[2]}); chrem([17,-4,-4,33],[9,5,7,16]),ilcm(9,5,7,16); # fin exercice 1.16. # exercice 1.17, page 139. nu:=proc(a::integer,m::nonnegint) local F,l,i,z,modulus,Nu,k; if igcd(a,m)<>1 then ERROR(`nu expects its arguments to be coprime integers`) fi; F:=readlib(ifactors)(m)[2]; l:=nops(F); for i to l do z:=a; modulus:=F[i][1]^F[i][2]; for k while z<>1 do z:=z*a mod modulus od; Nu[i]:=k od; ilcm(seq(Nu[i],i=1..l)) end: # nu # fin exercice 1.17. # exercice 1.19, page 140. f:=1/(x^4+x^2+1): convert(f,parfrac,x); dec:=unlikely(convert(f,fullparfrac,x)): map(radnormal,dec,rationalized); # fin exercice 1.19.