next up previous contents index
suivant: Traduction Algorithmique monter: Les algorithmes donnant la précédent: Traduction Algorithmique   Table des matières   Index

Traduction Xcas

ndiv1(n):={
  local d,l1,l2,k;
  d:=2;
  l1:=[1];
  while (n!=1) {
    l2:=[];
    k:=0;
    while (irem(n,d)==0) {
      n:=iquo(n,d);
      k:=k+1;
      l2:=concat(l2,l1*d^k);
    }
    l1:=concat(l1,l2); 
    d:=d+1;
  }
  return(l1);
}
On peut améliorer ce programme si on tient compte du fait qu'après avoir éventuellement divisé N par 2 autant de fois qu'on le pouvait, les diviseurs potentiels de N sont impairs.
On remplace alors :
$ \tt D+1-> D$
par :
si D=2 alors $ \tt D+1-> D$ sinon
$ \tt D+2 -> D$ fsi

On améliore encore le programme précédent en remarquant que, si le diviseur potentiel D est tel que $ \tt D>\sqrt N$, c'est que N est premier ou vaut 1. On ne continue donc pas la recherche des diviseurs de N et quand N est diffèrent de 1 on complète L1 par L1*N.
Et aussi, on ne teste comme diviseur potentiel de N, que les nombres 2, 3, puis les nombres de la forme 6*k - 1 ou de la forme 6*k + 1 (pour k $ \in$ $ \mathbb {N}$).
On remplace donc :
si D=2 alors $ \tt D+1-> D$ sinon
$ \tt D+2 -> D$ fsi
par :
si D<4 alors $ \tt 2*D-1 -> D$ sinon
$ \tt D+(4*D \bmod 6) -> D$ fsi


Documentation de giac écrite par Renée De Graeve