2 pièce(s) jointe(s)
Nombres premiers entre eux (coprime)
:salut:
recherche des nombres premiers entre eux (coprime en anglais) en utilisant le code donné ici : Algorithme d'Euclide et "plus grand commun diviseur"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function iscp = iscoprime(a,b)
%ISCOPRIME
%
% Author : Jerome Briot (Dut)
% Contact : dutmatlab#yahoo#fr -or- briot#cict#fr
% Profil : www.mathworks.com/matlabcentral/newsreader/author/94805
% : www.developpez.net/forums/u125006/dut/
%
% Version : 1.0 - 04 Sep 2009
%
% MATLAB : 7.6.0.324 (R2008a)
% System : Linux 2.6.24-24-generic
%
error(nargchk(2,2,nargin));
b = findgcd(a,b);
iscp = b==1; |
Cette fonction renvoie un tableau booléen (vrai/faux) si les nombres correspondants dans les deux tableaux d'entrée sont premiers entre eux.
Tout simplement ;)
Une petite démo :
Code:
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
| function demoiscoprime(n)
%ISCOPRIME
%
% Author : Jerome Briot (Dut)
% Contact : dutmatlab#yahoo#fr -or- briot#cict#fr
% Profil : www.mathworks.com/matlabcentral/newsreader/author/94805
% : www.developpez.net/forums/u125006/dut/
%
% Version : 1.0 - 04 Sep 2009
%
% MATLAB : 7.6.0.324 (R2008a)
% System : Linux 2.6.24-24-generic
%
error(nargchk(0,1,nargin));
if nargin == 0
n = 2;
end
if n == 1
a = [6 27 8 2 0 1268 462 25];
b = [35 6 0 4 0 1254 1071 6];
gcd = findgcd(a,b);
iscp = iscoprime(a,b);
sprintf('%5d %5d %5d %5d %5d %5d %5d %5d\n',[a;b;gcd;iscp].')
else
a = 1:75;
b = 1:75;
[x,y] =meshgrid(a,b);
iscp = iscoprime(x,y);
figure('color','w','numbertitle','off','toolbar','none',...
'name','ISCOPRIME Demo')
spy(iscp,'ko');
h = findobj('type','line');
set(h,'markerfacecolor','k')
axis equal tight
end |
Pour n = 1, la demo retourne le tableau suivant :
Code:
1 2 3 4
| 6 27 8 2 0 1268 462 25
35 6 0 4 0 1254 1071 6
1 3 -1 2 -1 2 21 1
1 0 0 0 0 0 0 1 |
La troisième ligne contient le plus grand commun diviseur entre chaque élément de la première ligne et celui de la seconde lui correspondant. La quatrième renvoie 1 si les termes sont premiers entre eux, deux à deux et 0 dans le cas contraire.
Pour n = 2, la démo renvoie la figure attachée en pièce jointe.
Chaque point noir correspond à un couple de l'intervalle [1:75,1:75] de nombres premiers entre eux.
Voila... si vous avez des remarques, des questions ou des suggestions, n'hésitez pas :ccool:
Mais rappelez-vous que je ne suis pas un spécialiste dans ce domaine :aie:
Note : Ne sachant pas si ces codes sont justes, je ne les ai pas optimisés (et donc pas commentés) :wink: