Modérateur: Xklr_65
fermat2 := proc(n)
local res,p;
res := false;
p := n-1;
while res=false do
p := p+1;
if igcd(2,p)=1 and (2 &^ (p-1) -1 mod p) = 0 then
res := true;
fi;
od;
RETURN(p);
end;
N:=2^1024:t := time():fermat2(N):time()-t;t := time():nextprime(N):time()-t;fermat2 := proc(n)
local res,p;
res := false;
p := n-1;
while res=false do
p := p+1;
if type(p,odd) then
if (2 &^ (p-1) -1 mod p) = 0 then
res := true;
fi;
fi;
od;
RETURN(p);
end;nextpremier:=proc(n)
local p;
while isprime(p)=false do
p:=p+1;
od;
RETURN(p);
end;
isprime(60);while #quelquechose à vérifier# do
#Choses à faire#
od;erd a écrit:3) voici un algorithme qui est censé vous donner un nombre premier. Si il vous le donne bien, il vous donnera aussi une preuve qu'il a mathématiquement assez de chance d'être premier et en plus c'est l'algo le plus rapide en terme de complexité (eh oui!), mais parfois il se trompe.... Qui peut me donner un exemple où il se trompe ? Question subsidiaire : quelqu'un a-t-il une idée de la probabilité d'erreur ? Question doublement subsidiaire : Comment s'appellent les nombres où il se trompe ? Suite des questions subsidiaires : pourquoi &^ ?


musyk a écrit:Serait-il possible d'avoir les réponses aux questions ?!
Le && est un "et" booléen, le & tout seul ne sert à rien ... le ^ nous dit que l'opération se fait bit à bit, alors je dirais que &^ signifie que l'on additionne bit à bit .... mais bon je n'en suis pas sûre parce que là je ne voies pas ce que l'on additionnerais dans le programme bit à bit ...
De plus, pourquoi le deuxième programme est optimisé .... j'aurais eu tendance à dire que le premier l'était car il n'a qu'un "if" ...![]()
Et que signifie "type(p,odd)" ??? !!! car c'est ce qui me semble différer avec le premier programme ( igcd, qui me semble etre équivalent à un pgcd ...)

> fermat2 := proc(n)
> local res,p;
> res := false;
> p := n-1;
> while res=false do
> p := p+1;
> if igcd(2,p)=1 and (2 &^ (p-1) -1 mod p) = 0 then
> res := true;
> fi;
> od;
> RETURN(p);
> end;
fermat2 := proc(n)
local res, p;
res := false;
p := n - 1;
while res = false do
p := p + 1;
if igcd(2, p) = 1 and ((2 &^ (p - 1)) - 1) mod p = 0 then
res := true
fi
od;
RETURN(p)
end
> fermat2(19,0/383,0);
19
> fermat2(19/383);
Error, (in fermat2) wrong number (or type) of parameters in function igcd


musyk a écrit: i^n mod m calcul puis réfléchit, et la deuxième réfléchit puis calcul ....
Retourner vers L'informatique en C.P.G.E.
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités