06exomaple.mws

> restart;

VI.1

> estparfait:=proc(n::integer)
local S,i;
S:=0;
for i to n-1 do if irem(n,i)=0 then S:=S+i
fi;
od;
evalb(S=n);
end;

estparfait := proc (n::integer) local S, i; S := 0;...
estparfait := proc (n::integer) local S, i; S := 0;...
estparfait := proc (n::integer) local S, i; S := 0;...
estparfait := proc (n::integer) local S, i; S := 0;...

> estparfait(496);

true

> estparfait(6);

true

> estparfait(497);

false

> listeparfait:=proc(n::integer)
local k,L;
L:=[];
for k to n do
if estparfait(k) then L:=[op(L),k] fi;
od;
L;
end;

listeparfait := proc (n::integer) local k, L; L := ...
listeparfait := proc (n::integer) local k, L; L := ...

> listeparfait(500);

[6, 28, 496]

> restart;

VI.2

> syracuse:=proc(n::integer)
local k,nn;
nn:=n;
for k from 1 while nn<>1
do
if irem(nn,2)=0 then nn:=nn/2
else nn:=3*nn+1
fi;
od;
k;
end;

syracuse := proc (n::integer) local k, nn; nn := n;...
syracuse := proc (n::integer) local k, nn; nn := n;...
syracuse := proc (n::integer) local k, nn; nn := n;...
syracuse := proc (n::integer) local k, nn; nn := n;...

> syracuse(1234567890);

352

> L:=NULL:for k from 1 to 50 do L:=L,[k,syracuse(k)] od: L;

[1, 1], [2, 2], [3, 8], [4, 3], [5, 6], [6, 9], [7,...
[1, 1], [2, 2], [3, 8], [4, 3], [5, 6], [6, 9], [7,...
[1, 1], [2, 2], [3, 8], [4, 3], [5, 6], [6, 9], [7,...
[1, 1], [2, 2], [3, 8], [4, 3], [5, 6], [6, 9], [7,...

> restart;

VI.3

> fibo1:=proc(n::integer)
local resultat,u,v,k,garage;
#Initialisation
u:=1;v:=1;
#Calcul des termes successifs
if n=0 then resultat:=u
elif n=1 then resultat:=v
else for k from 2 to n
do
garage:=v;
v:=u+v;
u:=garage;
resultat:=v;
od;
fi;
# On peut arranger la procédure et supprimer # resultat.
resultat;
end;

fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...
fibo1 := proc (n::integer) local resultat, u, v, k,...

> fibo1(1);

1

> fibo1(9);

55

> fibo2:=proc(n::integer)
option remember;
if n=0 then 1
elif n=1 then 1
else fibo2(n-1)+fibo2(n-2)
fi;
end;

fibo2 := proc (n::integer) option remember; if n = ...
fibo2 := proc (n::integer) option remember; if n = ...

> fibo2(9);

55

> restart;

VI.4

Par un procédé itératif

> Tn_2:=1:Tn_1:=X:
for k from 2 to 11
do
T:=2*X*Tn_1-Tn_2;
garage:=Tn_1;
Tn_1:=T;Tn_2:=garage;
od:

> collect(T,X);

1024*X^11-2816*X^9+2816*X^7-1232*X^5+220*X^3-11*X

Avec l'option remembe r

> T:=proc(n::integer)
option remember;
if n=0 then 1
elif n=1 then X
else sort(simplify(2*X*T(n-1)-T(n-2)))
fi;
end;

T := proc (n::integer) option remember; if n = 0 th...
T := proc (n::integer) option remember; if n = 0 th...
T := proc (n::integer) option remember; if n = 0 th...
T := proc (n::integer) option remember; if n = 0 th...

> T(11);

1024*X^11-2816*X^9+2816*X^7-1232*X^5+220*X^3-11*X

> time(T(50));

.283

> time(T(100));

1.433

> time(T(200));

3.300

> time(T(200));

0.

> time(T(210));

.516

> restart;

Sans l'option remembe r

> T2:=proc(n::integer)
if n=0 then 1
elif n=1 then X
else sort(simplify(2*X*T2(n-1)-T2(n-2)))
fi;
end;

T2 := proc (n::integer) if n = 0 then 1 elif n = 1 ...
T2 := proc (n::integer) if n = 0 then 1 elif n = 1 ...

> T2(11);

1024*X^11-2816*X^9+2816*X^7-1232*X^5+220*X^3-11*X

> time(T2(25));

22.366

> restart;

VI.5

> binom:=proc(n::integer,k::integer)
option remember;
if k>n then 0
elif k=0 or k=n then 1
else binom(n-1,k)+binom(n-1,k-1);
fi;
end;

binom := proc (n::integer, k::integer) option remem...
binom := proc (n::integer, k::integer) option remem...
binom := proc (n::integer, k::integer) option remem...
binom := proc (n::integer, k::integer) option remem...

> binom(10,2);

45

> restart;

VI.6

On commence par écrire une procédure qui calcule la somme de tous les diviseurs propres d'un entier n.

> `somme des diviseurs`:=proc(n::integer)
local s,i;
s:=1;
for i from 2 to n-1
do
if irem(n,i)=0
then s:=s+i
fi
od;
s;
end;

`somme des diviseurs` := proc (n::integer) local s,...
`somme des diviseurs` := proc (n::integer) local s,...

> amiable:=proc(n::integer)
local i,j,sol; # On va créer une séquence de liste qui seront les solutions.
sol:=NULL; # initialisation de la séquence à vide
for i from 3 to n # boucle pour parcourir tous les entiers
do
j:=`somme des diviseurs`(i); # Le seul candidat pour être amiable avec i est j
if j>=i
and # Pour éviter d'avoir 2 fois la même solution
`somme des diviseurs`(j)=i
then sol:=sol,[i,j];
fi
od;
sol;
end;

amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...
amiable := proc (n::integer) local i, j, sol; sol :...

> amiable(30);

[6, 6], [28, 28]

> amiable(300);

[6, 6], [28, 28], [220, 284]

> amiable(1500);

[6, 6], [28, 28], [220, 284], [496, 496], [1184, 12...

> restart;

VI.7

> menu:=proc(jour::string)
if jour="lundi" then "Flageolet et gigot d'agneau"
elif jour="mardi" then "Poulet-frites"
elif jour="mercredi" then "Haricots verts et paupiette d'autruche"
elif jour="jeudi" then "citrouille de Halloween"
elif jour="vendredi" then "Filet de sole et sauce à l'oseille"
else "Désolé, nous serons fermé ce week-end"
fi;
end:

>