TP09-sol.cas
2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
restart;maple_mode(1);
/* -------------------------------------EXERCICE-----------------------------------------*/
l:=[];
for n from 10^4 to 10^5 by 1000 do l:=[op(l),[n,time(27^(2^n) mod 107)(1)]] ; od:
/* Le coup semble lineaire (en n) sur ce dessin, ce qui illustre bien que le£ calcul de 27^A est en O(ln(A))*/
rl:=[linear_regression(l)]:
plotlist(l):line(y=rl[1]*x+rl[2],color=green):
/* On aurait pu utiliser directement linear_regression_plot pour faire le dessin.*/
correlation(l):
puis:=proc(a,n)
local A,B,C;
A:=1;B:=a;C:=n;
while C>0 do
if irem(C,2)=1 then A:=A*B;C:=(C-1)/2;B:=B*B;
else C:=(C)/2;B:=B*B;
fi;
od;
A;
end;
puis(2,7);
puis(2,71);
convert(71,base,2);
/* --------------------------------------Exercice---------------------------------------------------*/
8*2+7 mod 7; (8*2+7) mod 7; #Attention mod est prioritaire sous xcas
/* Si a=1, on a x_n=x_0+n.c [m], on fait donc par exemple: c=7,x0=1*/
l:=[seq((n*7+1) mod 1001,n=1..100)];
histogram(classes(l,0,1001/20)); #C'est tout a fait plat. Trop!
/* Remplacer les crochets par des incolades cree un ensemble, ce qui simplifie£ automatiquement les elements egaux */
nops(l);nops({op(l)}); #ils sont tous distincts
l:=[seq(rand(1001),n=1..100)];
histogram(classes(l,0,1001/5));
histogram(classes(l,0,1001/20));
nops(l);nops({op(l)});#il y a bien des anniversaires identiques
/* On a en fait 1001^100 suites possibles, et 1001!/901! suites dont£ tous les termes sont distincts.*/
1001!/901!/1001.^100;
x:=1; a:=237;c:=54321;m:=10^4; l:=[];
for i from 1 to 500 do x:=(a*x+c) mod m; l:=[op(l),x] ; od:
l1:=[seq(i mod 10^2,i=l)];
l2:=[seq(trunc(i/10^2),i=l)];
histogram(classes(l1,0,5));
histogram(classes(l2,0,5));
l1:=[seq(i mod 10,i=l)];
histogram(classes(l1,0,1));
/* Si d est un diviseur de m et que $y_n=x_n [d]$, alors $y_{n+1}=ay_n+c [d]$£Donc si d=10^2, les 2 derniers chiffres de x_n ont p\'eriode d'au plus d.*/
x:=1; a:=237;c:=54321;m:=10^4-1; l:=[];
for i from 1 to 500 do x:=(a*x+c) mod m; l:=[op(l),x] ; od:
l1:=[seq(i mod 10^2,i=l)];
l2:=[seq(trunc(i/10^2),i=l)];
histogram(classes(l1,0,5));
histogram(classes(l2,0,5));
l1:=[seq(i mod 10,i=l)];
histogram(classes(l1,0,1));
x:=1; a:=237;c:=54321;m:=prevprime(10^4); l:=[];
for i from 1 to 500 do x:=(a*x+c) mod m; l:=[op(l),x] ; od:
l1:=[seq(i mod 10^2,i=l)];
l2:=[seq(trunc(i/10^2),i=l)];
histogram(classes(l1,0,5));
histogram(classes(l2,0,5));
l1:=[seq(i mod 10,i=l)];
histogram(classes(l1,0,1));
x:=1; a:=237;c:=54321;m:=10; l:=[];
for i from 1 to 100 do x:=(a*x+c) mod m; l:=[op(l),x] ; od:
histogram(classes(l,0,1)); #certaines valeurs ne sont pas atteintes.
periode:=proc(a)
x:=1;p:=1;
if (a mod 5 <> 0) then while x>0 do p:=p+1;x:=(a*x+1) mod 125; od; fi;
p; end proc;
periode(1),periode(5); #verification
l:=seq(periode(i),i=2..124);max(l);
/* On a: x_n=(a^n-1)/(a-1) mod m, donc la periode est l'ordre de a.*/