fonctions utilisées : zeros(), isprime(), imwrite()

Une photo des nombres premiers avec Octave

Nous allons représenter les 40 000 premiers entiers non nuls sur une image de 20 pixels × 20 pixels; les entiers sont rangés de gauche à droite et de haut en bas. Chaque entier premier sera représenté par un pixel blanc…

La photo

Le code Octave

On utilisera la fonction isprime() qui appliquée à un nombre et plus généralement à une matrice donne 1 si le nombre est premier et 0 sinon. En multipliant par 255, on aura la matrice d'une image avec des pixels blanc (255) et des pixels noirs (0).

n=200;

#construction de la matrice 20x20
E=zeros(n,n);
for a=1:n,
	for b=1:n,
		E(a,b)=(a-1)*n+b;
	end
end

#test de primalité
E=isprime(E);

#construction de l'image
E=uint8(255*E);
imwrite("prim200.png",E)

Remarque : en supprimant la ligne E=uint8(255*E);, on obtient le même résultat… pourquoi?

Quelle colonne a le plus de nombres premiers?

Avant de construire l'image, donc de multiplier par 255, nous insérons les commandes suivantes :

s=(sum(E));
p=find(s==max(s));
k=s(p);
printf("la colonne %i est celle qui contient le plus \n de nombres premiers soit %i" ,p,k)

la première ligne fait la somme de chaque colonne, la deuxième cherche la colonne dont la somme des 1, donc des nombres premiers est la plus grande; la troisième donne la somme correspondante et la quatrième affiche le résultat.

On obtient :


fait le 19 août 2008