begin process at 2012 02 13 02:14:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > GENERATEUR DE NOMBRES PREMIERS

GENERATEUR DE NOMBRES PREMIERS


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :21/01/2005 Date de mise à jour :21/01/2005 17:48:03 Vu :9 302

Auteur : malik7934

Ecrire un message privé
Commentaire sur cette source (65)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ben c'est un générateur de nombres premiers utilisant le test de Miller-Rabin. A quoi ça sert? Bah... c'est our les amis de RSA par exemple ;o)

! Il n'est pas fait pour les grands nombres, comme les GMP par exemple !

Source

  • // ------------ formulaire pour appeler les fonctions
  • <HTML><TITLE>Générateur de Nombres Premiers Miller-Rabin Test)</TITLE><HTML><BODY bgcolor="#CCDDEE">
  • Cet algorithme permet de générer un nombre premier compris entre 2 puissance l et 2 puissance (l-1) ...<BR />
  • <B> Les grands nombres ne sont pas supportés!</B><BR />
  • <form action="genprime.php" method="POST">
  • <P>
  • Entrer l: <INPUT type="text" name="powerl">
  • <INPUT type="submit" value="générer">
  • </P></form></BODY></HTML>
  • // ------------ genprime.php
  • <?php
  • function puissance($x,$y){
  • $resultat=1;
  • for ($i=0;$i<$y;$i++)
  • $resultat *= $x;
  • return $resultat;
  • }
  • function int2bin($n,$l){
  • $i = 0;
  • if ($l != 0){
  • for ($j=0;$j<$l;$j++)
  • $bin[$j] = 0;
  • }
  • while($n >= 1){
  • if (bcmod($n,2) == 1) {$bin[$i] = 1; $n = ($n-1)/2;}
  • else {$bin[$i] = 0; $n = $n/2;}
  • $i++;
  • }
  • return $bin;
  • }
  • function puissanceBigNbr($a,$n,$e){ // calcul de a^e mod n
  • $m = max($a,$n);
  • $o = int2bin($m, 0);
  • $l = count($o);
  • $be = int2bin($e,$l);
  • $x = 1; $y = $a;
  • for ($i=0;$i<$l;$i++){
  • if ($be[$i] == 1){$x = bcmod(($x*$y),($n));}
  • $y = bcmod(($y*$y),($n));
  • }
  • return $x;
  • }
  • function millerTest($n,$k){
  • if ($n <4) {return 0;}
  • else{
  • if (bcmod($n,2) == 0) {return -2;}
  • else{
  • $s=0;
  • $n2 = $n-1;
  • while (bcmod(($n2),2) == 0){
  • $s++;
  • $n2 /= 2;}
  • $t = ($n-1)/(puissance(2,$s));
  • $cpt=0;
  • for ($j=0; $j<$k;$j++){
  • mt_srand((double)microtime()*1000000);
  • $b = mt_rand(1,($n-1));
  • $x = puissanceBigNbr($b,$n,$t);
  • $i = 0;
  • if ($x != 1){
  • while ($x != ($n-1)){
  • $x = bcmod((puissance($x,2)),($n));
  • $i++;
  • if (($i == $s) || ($x == 1))
  • return -1;
  • }
  • }
  • $cpt++;
  • }
  • return $cpt;
  • }
  • }
  • }
  • $powerl = $_POST['powerl'];
  • if (!(isset($powerl))) {echo "INSERER UN NOMBRE<BR>"; include('miller.php'); exit();}
  • if (!(is_numeric($powerl))){echo "INSERER UN NOMBRE<BR>"; include('miller.php'); exit();}
  • $down = puissance(2,($powerl-1));
  • $up = puissance(2,$powerl);
  • $k = 20;
  • echo '<HTML><TITLE>Générateur de Nombres Premiers (Miller-Rabin Test)</TITLE><HTML><BODY bgcolor="#CCDDEE">';
  • echo 'Ok... on cherche un nombre premier compris entre '.$down.' et '.$up.'.<BR /><BR />';
  • echo 'Etape 1: choix d\'un nombre aléatoire dans entre '.$down.' et '.$up.':<BR />';
  • mt_srand((double)microtime()*1000000); // ce générateur aléatoire ne l'est pas vraiment
  • $n = mt_rand($down,$up); // une amélioration serait d'utiliser un RNG plus "éprouvé"...
  • echo "Etape 2: test de primalité avec $k itérations: <BR /><BR />";
  • $rd = millerTest($n,$k);
  • $i=0;
  • while (($rd == -1) || ($rd == -2)){
  • echo "tirage aléatoire $i: $n n'est pas premier <BR />";
  • mt_srand((double)microtime()*1000000);
  • $n = mt_rand($down,$up);
  • $i++;
  • $rd = millerTest($n,$k);
  • }
  • $i++;
  • if (($rd == 0) ||($rd == 20))
  • echo "tirage aléatoire $i:<B> $n est un nombre premier</B><BR />";
  • if (($rd != 0) && ($rd != -1) && ($rd != -2) && ($rd != 20))
  • echo "tirage aléatoire $i:<B> $n a passer le test $rd fois sur $k</B><BR />";
  • echo '</BODY></HTML>';
  • ?>
// ------------ formulaire pour appeler les fonctions 
<HTML><TITLE>Générateur de Nombres Premiers Miller-Rabin Test)</TITLE><HTML><BODY bgcolor="#CCDDEE">
Cet algorithme permet de générer un nombre premier compris entre 2 puissance l et 2 puissance (l-1) ...<BR />
<B> Les grands nombres ne sont pas supportés!</B><BR />
<form action="genprime.php" method="POST">
	<P>
	Entrer l: <INPUT type="text" name="powerl">
	<INPUT type="submit" value="générer">
	</P></form></BODY></HTML>

// ------------ genprime.php

<?php

function puissance($x,$y){
	$resultat=1;   
	for ($i=0;$i<$y;$i++)   
		$resultat *= $x;   
	return $resultat;   
}   

function int2bin($n,$l){
	$i = 0;
	if ($l != 0){
		for ($j=0;$j<$l;$j++)
			$bin[$j] = 0;
	}
	while($n >= 1){
		if (bcmod($n,2) == 1) {$bin[$i] = 1; $n = ($n-1)/2;}
		else {$bin[$i] = 0; $n =  $n/2;}
		$i++;
		}

	return $bin;
}

function puissanceBigNbr($a,$n,$e){ // calcul de a^e mod n 
	
	$m = max($a,$n);
	$o = int2bin($m, 0);
	$l = count($o);
	$be = int2bin($e,$l);
	
	$x = 1; $y = $a;
	for ($i=0;$i<$l;$i++){
		if ($be[$i] == 1){$x = bcmod(($x*$y),($n));}
	$y = bcmod(($y*$y),($n));
	}

	return $x;
}

function millerTest($n,$k){

	if ($n <4) {return 0;}
	else{
		if (bcmod($n,2) == 0) {return -2;}
		else{
			$s=0;
			$n2 = $n-1;
			while (bcmod(($n2),2) == 0){
				$s++;
				$n2 /= 2;}
			$t = ($n-1)/(puissance(2,$s));
			$cpt=0;

			for ($j=0; $j<$k;$j++){
				mt_srand((double)microtime()*1000000);
				$b = mt_rand(1,($n-1));
				$x = puissanceBigNbr($b,$n,$t);
				$i = 0;	
				if ($x != 1){
					while ($x != ($n-1)){
						$x = bcmod((puissance($x,2)),($n));
						$i++;
						if (($i == $s) || ($x == 1))
							return -1;
					}
				}
			$cpt++;	
			}
			return $cpt;
		}
	}				
}


$powerl = $_POST['powerl'];
if (!(isset($powerl))) {echo "INSERER UN NOMBRE<BR>"; include('miller.php'); exit();}
if (!(is_numeric($powerl))){echo "INSERER UN NOMBRE<BR>"; include('miller.php'); exit();}

$down   = puissance(2,($powerl-1));
$up     = puissance(2,$powerl);

$k = 20;

echo '<HTML><TITLE>Générateur de Nombres Premiers (Miller-Rabin Test)</TITLE><HTML><BODY bgcolor="#CCDDEE">';
echo 'Ok... on cherche un nombre premier compris entre '.$down.' et '.$up.'.<BR /><BR />';
echo 'Etape 1: choix d\'un nombre aléatoire dans entre '.$down.' et '.$up.':<BR />';


mt_srand((double)microtime()*1000000);	// ce générateur aléatoire ne l'est pas vraiment
$n = mt_rand($down,$up);		// une amélioration serait d'utiliser un RNG plus "éprouvé"...

echo "Etape 2: test de primalité avec $k itérations: <BR /><BR />";

$rd = millerTest($n,$k);
$i=0;
while (($rd == -1) || ($rd == -2)){
	echo "tirage aléatoire $i: $n n'est pas premier <BR />";
	mt_srand((double)microtime()*1000000);
	$n = mt_rand($down,$up);
	$i++;
	$rd = millerTest($n,$k);
	}
$i++;
if (($rd == 0) ||($rd == 20)) 
	echo "tirage aléatoire $i:<B> $n est un nombre premier</B><BR />";
if (($rd != 0) && ($rd != -1) && ($rd != -2) && ($rd != 20)) 
	echo "tirage aléatoire $i:<B> $n a passer le test $rd fois sur $k</B><BR />";

echo '</BODY></HTML>';
?>

 Conclusion

J'ai fait une batterie de tests et je crois que tout beigne... ceci dit, si quelqu'un trouve une erreur (genre un nombre premier ignoré ou un nombre non-premier considéré comme premier), je suis preneur!

Une dernière chose: le paramètre $k est ici à 20. Plus il est grand, plus le résultat est sûr (mais plus le temps de calcul est long!)


 Historique

21 janvier 2005 17:48:03 :
Ajout de deux contrôles (isset, is_numeric)

 Sources du même auteur

Source avec Zip Source avec une capture EXÉCUTER UN SCRIPT AU-DELÀ DU TIMEOUT DE PHP
Source avec une capture SAUVEGARDE AUTOMATISÉE DE VOS BASES DE DONNÉES
SAVOIR QUI CONNAÎT QUI DANS UN FORUM/CHAT/...
Source avec une capture CACHER UNE SIGNATURE DANS UNE IMAGE
NOUVEAUX MESSAGES SUR YAHOO MAIL

 Sources de la même categorie

Source avec Zip Source avec une capture ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR ... par stephelle
Source avec Zip CRYPTAGE REVERSIBLE par Mokost
Source avec Zip Source avec une capture CREATION DE COMPTE AVEC CRYPTAGE ET ESPACE DE CONNEXION SEC... par bm1982
Source avec Zip PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
CRYPTAGE/DECRYPTAGE MCRYPT par sephirothgeek

Commentaires et avis

Commentaire de Anthomicro le 21/01/2005 17:36:26

Salut,

bon tu t'en doutais, le code html est crade...

Mais je n'ai pas envie de corriger, puisque tu as fait exprès de poster cette source sous cette forme.

Les echo sont aussi crades au passage,  et tu ne vérifies nul part avec isset() si les variables $_POST sont présentes...

Commentaire de malik7934 le 21/01/2005 17:40:08

Tu rigoles! J'ai bien fait gaffe de mettre des / dans <BR /> et d'utiliser des <P> que tu utilises et moi jamais... par contre les echos, c'est vrai que j'ai brassé... mais #*&#* à la fin! Le but de ce code, c'est de présenter des fonctions... pas un affichage!

Un point pour toi par contre: je n'utilise jamais isset(), mais je devrais... je vais corriger...

Commentaire de Anthomicro le 21/01/2005 17:42:43

non les balises sont crades, elles doivent être en minuscules...

Commentaire de malik7934 le 21/01/2005 17:52:00

"elles doivent être en minuscules"... ok, je m'étais rangé à ton avis mais là je laisse tomber.  Tu devrais regarder le travail derrière le 'XHTML-W3C-RFC-ement' correct de temps en temps au lieu de te braquer sur le '/' qui manque ou la majuscule qui va pas...

J'hallucine...

Commentaire de Anthomicro le 21/01/2005 17:56:41

Mais le problème est que ce n'est pas correct justement...

Après suis mon avis ou pas, perso je m'en fiche après tout, j'aurais fait mon devoir. Le seul truc à ne pas faire c'est, lorsque tu réponds à quelqu'un, de coder comme tu le fais actuellement, c'est tout...

Que tu codes comme un porc c'est un fait, mais ne codes pas comme un porc lorsque tu veux rendre service à la communauté puisque c'est l'effet inverse qui se produira à plus ou moins long terme, et après on sera toujours obligés de rabacher "en minuscules ceci, <?php au lieu de <?" à cause de gens comme toi...

Commentaire de malik7934 le 21/01/2005 18:10:55

donne moi un link faisant référence (je te dis pas de m'envoyer sur w3c.com hein) et qui me dise tout ce qu'il faut faire pour être 'XHTML-W3C-RFC-ement' correct et peut-être que j'arrêterai d'être un porc crade.

Commentaire de Anthomicro le 21/01/2005 18:24:42

www.openweb.eu.org
www.vulgarisation-informatique.com/xhtml.php

ça devrait suffire ;-)

Commentaire de malik7934 le 21/01/2005 18:27:23

j'prends note... n'empêche que même si je comprends en partie ton point de vue, je persiste et signe: tu devrais deserrer un peu les dents... bon, soit, je m'en vais voir ces URL.

Thanx ;o)

Commentaire de JulioDelphi le 21/01/2005 18:29:24 administrateur CS

selon tes liens antho, son code est très bon et tu le lui confirme en disant : "ton code html..." j'ai lu :
"en HTML on a le loisir de choisir la casse de ses balises, ce n'est plus possible sous XHTML"... donc son code HTML est bon !
merci pour ton lien =)
ps : merci de ne pas insulter les gens de "porc" et de commenter la source pour le fond et non pour la forme ...

Commentaire de Anthomicro le 21/01/2005 18:52:28

Je commente ce qui est posté, ça passe aussi par le code XHTML, oui en HTML c'est valide, pas en XHTML, c'est un abus de langage quand je parle de HTML, m'enfin on se doute que c'est du XHTML à la vue de mes commentaires.

Commentaire de Anthomicro le 21/01/2005 19:02:24

PS : promis je "déserrerai les dents" si tu fournis un code XHTML propre quand tu aides les autres :-)

a ++

Commentaire de malalam le 21/01/2005 21:59:14 administrateur CS

Bon,
je me permets encore, lol...

Encore une fois, je precise que je suis une brele pour ce qui est de faire un joli code. Mais j'apprends...
Alors, Malik, je t'aime bien (si si, j'aime bien tes remarques, tes excuses, le fait que tu ecoutes, que tu donnes ton avis)...je me fiche de ton code parce que moi, les nombres premiers, lol...
Mais c'est une jolie initiative :-)
Ceci dit, oui, le code HTML n'est pas bon (crade C tres pejoratif quand meme), pas W3C compliant. Mais ce n'est pas a toi que je veux ecrire, lol...juste : bravo Malik, t'as eu le courage de faire un source en demandant une critique d'Antho le terrible, et en plus, sur des maths!!
Non, je veux ecrire pour JulioDelphi : tu oublies un truc...le XHTML c'est un peu le HTML 5.0...non parce que si on suit ton raisonnement, on peut s'en tenir au HTML1.0, apres tout? Maintenant, c'est le XHTML. X pour Extended, et un peu quand meme pour XML...bref, en XML, la casse est importante! Ca, j'en sais quelquechose...ben autant s'habituer a ce que ca le devienne pour notre cher vieil HTML...moi je trouve ca bien, si on parle juste de casse. T'aimerais, toi, que dans ton code php, la variable $MaVariable soit la meme que ta variable $mavariable ? Moi pas...je te dis pas le bordel dans ton code si tu te permets d'ecrire tes variables avec la casse que tu veux...ou tes fonctions...ou tes classes...t'imagines? Un coup c'est la classe MaClasse, un coup c'est MACLASSE, un coup c'est ...enfin t'as compris.
Ensuite, se conformer au standard W3C, c'est faire avancer le web plus vite...a mon avis. Tu imagines creer un RSS sans suivre la bonne DTD? Tu t'imagines creer une requete SOAP sans l'enveloppe SOAP "standard" ?
Ok, le HTML, ca a ete iun peu tout et n'importequoi...parce qu'il a vite evolue, parce que les navigateurs en ont fait a leur tete (surtout un...suivez mon regard...mais c'est pas plus mal parfois puisque certaines de ses excentricites sont devenues des standards maintenant...),  parce qu'il a ete trop permissif...mais maintenant, il devient rigoureux, serieux, plus utile, plus puissant...autant s'y conformer, ca ne peut que faire du bien a nos codes dans l'avenir. Enfin en tous cas, ca leur en donne un, d'avenir...

Commentaire de Anthomicro le 21/01/2005 22:03:31

>"d'Antho le terrible"

mouais...

Commentaire de JulioDelphi le 21/01/2005 22:06:21 administrateur CS

malalam : 10/10

Commentaire de coucou747 le 21/01/2005 23:17:27 administrateur CS

t'as pas besoin d'un HTML crade ou pas, ni d'un php corect, seul l'algorythmique compte pour ça...
C'est un test potentiellement inutile en php car :

Les variables php sont en float soit : 32 bits (ma calto te casse en quelques heures... Mon pc en quelques secondes...) Soit si qqn fait un code RSA c'est inutilisable... On est limité à 128 bits, alors autant les utiliser à fond...

c'est interessant pour l'algo, et non le code en lui même... ça met miller/rabin à portée de tout le monde...

Merci d'avoir posté ce code, je le referais surement en C++

Commentaire de JulioDelphi le 21/01/2005 23:40:16 administrateur CS

coucou : merci d'etre constructif t cool, ça fera plaisir a l'auteur de la source =)

Commentaire de coucou747 le 22/01/2005 00:09:26 administrateur CS

y a seulement un détail : pourquoi php ?

Commentaire de malik7934 le 22/01/2005 01:22:41

Salut Coucou747...
Si tu vas sur cppfrance, tu verras que j'ai bien donné côté crypto... mais comme je préfère le php, je me suis mis en tête de refaire les mêmes choses... mais vu l'ambiance terrible que ça génère... enfin bon...

Commentaire de eXon le 22/01/2005 06:14:16

Ta source est bonne sauf que je te conseil d'utilisé la fonction pow au lieu de te la créé toi même ta fonction puissance. Exemple d'utilisation: pow(10,9) serra équivalent à 10^9. Pour les gros numéros par contre ton autre fonction est très utile :).

Commentaire de malik7934 le 22/01/2005 09:23:32

Encore une remarque à Coucou747...

Effectivement, ce code n'a que pour but de présenter Miller-Rabin, point final. Sinon il est vrai que avec GMP par exemple, il suffirait d'utiliser le PRNG gmp_random() puis gmp_prob_prime (qui utilise sûrement ce test) et ce serait fini!

Pour eXon...

merci pour l'info, j'suis pas trop au courant de ce qui existe comme fonctiones prédéfinies et j'ai pas pris le temps de chercher... je saurai pour la prochaine fois ;o)

Commentaire de Kirua le 22/01/2005 14:07:45

je voulais juste savoir... est-ce que dans les plus grandes valeurs possiblement codées dans une variable numérique PHP ton algo reste rapide et correct? Càd que... vu la raréfaction des nombres premiers à mesure qu'on avance sur le demi-axe des naturels, il y a de moins en moins de nb premiers (logique), et donc il peut arriver que ton programme en cherche un dans un intervalle qui n'en contient pas! Or comme tu fais les essais au hasard, tu risques de tourner en rond à l'infini (enfin, max_execution_time ou je sais pas quoi) sans jamais détecter que c'est peine perdue :/ ce que je propose: tu choisis un point de départ au hasard, et ensuite tu testes tous les nombres à partir de ce point, à la suite, puis quand tu arrives au bout de l'intervalle de test, tu te replaces au début de l'intervalle et tu restestes tous les nombres jusqu'à ton point de départ. ainsi, tu le sauras si tu as déjà tout testé.

un inconvénient à ma méthode: les probabilités. s'il y a 150 nombres entre un premier Pa et un premier Pa+1, mais qu'il n'y en a que 85 entre un premier Pn et un premier Pn+1, alors Pa+1 sortira plus souvent que Pn+1, ce qui est une faiblesse exploitable par un cryptanalyste!

Juste au passage comme ça: on écrit algorIthmique, merci d'en prendre bonne note ;).

Commentaire de malik7934 le 22/01/2005 14:33:24

Salut Kirua,

"il peut arriver que ton programme en cherche un dans un intervalle qui n'en contient pas" dis-tu... un peu de maths:

Théorème des nombres premiers: Le nombre de nombres premiers =< à x, noté e(x), vérifie e(x) ~ x/lnx

Donc, supposons que je prenne dans mon algo l = 500. L'algo va donc chercher un nombres premiers dans l'intervalle [2^499,2^500]. Cet intervalle contient 1636695303948070935006594848413799576108
3210230215323947416456840480668982023372
7744163504616295207857544334206378003550
4608628272942696526664263794688 chiffres (tu peux vérifier sur http://www.swox.com/gmp/#TRY), ce qui est conséquent tout de même!

Un simple calcul nous dit que le nombre de nombres premiers entre 2^499 et 2^500 est:

2^500/ln2^500 - 2^499/ln2^499 = (2^499/ln2)*(2/500 - 1/499) = (2^499)* 0.00288... et je t'assure que ça fait bien plus que 1!

Pour ce qui est de l'efficacité, on peut être franchement plus rapide. Ne serait-ce qu'en utilisant GMP. En plus, les calculs ne sont pas faits sur des bits (on peut faire ça en PHP?), donc on perd du temps. Ceci mis à part, l'algorithme de Miller-Rabin est optimisé, ainsi que la fonction puissanceBigNbr (il s'agit d'une exponentiation de "droite à gauche").

Commentaire de Kirua le 22/01/2005 15:07:39

Ok, merci pour ta réponse :)

Commentaire de coucou747 le 22/01/2005 16:02:00 administrateur CS

"demi-axe des naturels"
les naturels vont le 0 à +infinit soit, ce demi axe n'existe pas, tu voulais surement parler de N N est une partie de Z (Zahl = entier relatif)...

Commentaire de Kirua le 22/01/2005 16:21:38

bah vi, mais tu peux très bien placer les éléments de |N sur un demi axe... tous les points ne sont pas définis, voilà tout. L'idée de l'axe, c'est juste de pouvoir définir un ordre: l'ensemble est ordonné, par opposition à C (complexes), qui est non-ordonné (dans |R², forcément, ça tient pas sur un seul axe)

Commentaire de malik7934 le 22/01/2005 16:27:13

Désolé coucou747, mais je crois bien que, rigoureusement parlant, Kirua a raison: Les nombres entiers ont une borne inférieure qui est zéro et n'ont pas de bornes sup... du coup c'est un demi axe, le terme est le bon!

Ceci dit on s'en fout un peu, non??!!

;o)

Commentaire de Kirua le 22/01/2005 17:05:55

Ah, j'avais pas compris que c'était ça qu'il contestait. Ben oui, effectivement, c'est comme pour une droite, une demi droite et un segment de droite... ça dépend du nombre de bornes, or pour |N, il n'y a bien qu'une seule borne (0)

Commentaire de coucou747 le 22/01/2005 18:32:48 administrateur CS

ouais exact, N est un un demi axe par raport à Z

je croyais plutot que tu renvoyais à la moitié de l'intervale N... Ce qui n'a aucun sens... N c'est la moitié de Z...

Commentaire de Kirua le 22/01/2005 18:36:06

La moitié ... c'est très discutable. Tu peux mettre N et Z en bijection, résultat: N et Z contiennent autant d'éléments l'un que l'autre, leur "infinité" est égale, ce qui n'est pas vrai pour Z et R (l'infini dans R est plus grand que l'infini dans Z) ... c'est bizarre hein? :/ ça faisait l'objet de tout un article dans la revue belge Maths Jeunes.

Commentaire de coucou747 le 22/01/2005 18:41:57 administrateur CS

??

tout N est dans Z alros que le contraire est faux !!

Commentaire de malik7934 le 22/01/2005 20:45:56

Est-ce que cet article de la revue belge Maths Jeunes est dispo en ligne? Ca m'intéresses car je suis super sceptique sur cette théorie. pour moi on ne peut rien dire sur ce qu'il y a à l'infini et on ne peut pas comparer l'infini de N et celui de Z.

C'est mon avis mais je l'argumente ainsi: supposons que nous sommes à l'infini de N. Si on fait +1, on est à l'infini de N, si on poursuit avec des +1, on sera encore et toujours à l'infini de N et on aura dépassé celui de Z... etc... en d'autres termes, on ne peut pas traîter avec l'infini comme avec d'autres nombres... tout ça pour dire que l'infini de N est à la fois pareil et différent que celui de Z!!! Maintenant, pour R c'est à voir...

(vite, une aspirine!)

Si t'as l'URL, c'est volontiers!

Commentaire de Kirua le 22/01/2005 21:26:06

Je ne suis pas convaincu par ton raisonnement Malik. Tu considères que quand tu es à l'infini, tu peux encore avancer, or cela n'est vrai que si tu considères être, non pas à l'infini, mais à une "grande" valeur dans N. Je m'explique: tu raisonnes comme si tu prennais une très grande valeur dans N, puis en avançant, c'est de plus en plus grand, mais tu dis: je suis à l'infini (= la borne ouverte de N): tu ne peux plus avancer (et c'est contradictoire avec le principe d'infini, je sais bien). C'est compliqué d'agir avec l'infini... faut voir comment on le défini.

Je ne me souviens plus de la démonstration faite pour N et Z (on dit qu'ils sont dénombrables, allez savoir), mais prennons l'exemple de K, qu'on définira ici comme l'ensemble des carrés parfaits.

N = {0, 1, 2, 3, ...}
K = {0, 1, 4, 9, ...}

On peut associer à chaque élément de N un et un seul élément de K (en effet, soit n ¤ N, n² ¤ K pour tout n (¤ = le signe "appartient à l'ensemble")).
On peut également associer à chaque élément de K un et un seul élément de N: soit k ¤ K, sqrt(k) ¤ N, pour tout k.

On se rend donc compte que les deux ensembles contiennent autant d'éléments l'un que l'autre, ce qui va complètement à l'encontre de notre perception intuitive (bah oui, entre 1 et 4 il y a 2 et 3, qui ne sont pas dans K mais bien dans N, et K est compris dans N, alors quoi??), mais le fait est que des travaux mathématiques déjà anciens mais tjs d'actualité, reconnus etc par les mathématiciens professionnels ammènent (et je ne comprends pas plus que vous) que si deux ensembles infinis peuvent être mis en bijection, ils contiennent une même infinité de membres, ce qui n'est pas vrai pour N et R par exemple.

La revue Math Jeunes n'est pas en ligne, malheureusement, et je n'ai pas de scanner :/ Je soulignerai seulement que je n'ai pas été franchement convaincu par l'article, mais ... ce que je vous présente ici, ce sont les conclusions du papier, et j'ai foi en cette revue.

Commentaire de coucou747 le 22/01/2005 21:30:43 administrateur CS

sqrt et -sqrt

Commentaire de Kirua le 22/01/2005 21:32:05

pas dans N, tu parles trop vite ;)

Commentaire de coucou747 le 23/01/2005 11:49:32 administrateur CS

pas dans N mais dans Z oui, donc il y a deux fois plus de nombres....

Prends au hasard 10000 nombres de Z, en gros tu en aura 50% qui sont aussi dans N...

En info on ne retrouve pas ça avec signed et unsigned car la borne se déplace...

Commentaire de Kirua le 23/01/2005 12:15:02

Nononon, je t'assure, c'est bizarre et dur àcroire, mais N et Z comportent une même infinité de nombres. Et 10 000 nombres, ce n'est pas représentatif de l'infini, et 10^1000000000000000000 n'est pas non plus représentatif, ni d'ailleurs aucun autre nombre fini.

Commentaire de coucou747 le 23/01/2005 12:19:23 administrateur CS

ouais, de toute façon, c'est pas ça qui ira m'empècher de dormir...

Commentaire de malik7934 le 23/01/2005 22:45:13

Bien qu'on va pas débattre là dessus encore des semaines, je veux juste insister sur un truc Kirua:

Tu dis "Tu considères que quand tu es à l'infini, tu peux encore avancer, or cela n'est vrai que si tu considères être, non pas à l'infini, mais à une "grande" valeur dans N"

FAUX! La preuve toute simple? Ok: limite pour x tendant vers l'infini de f(x) = x, c'est l'infini, ok... bien... et  limite pour x tendant vers l'infini de f(x) = x+1, c'est combien??!! C'est l'infini aussi! CQFD, poils aux pieds!

Maintenant, je sais pas si on a le niveau pour ce débat. La mathématique de l'infini fait appel à des concepts qu'on apprend même pas à l'uni... en plus il faut différencier l'infini physique de l'infini mathématique...

Sur ce, à bon entendeur, salut!

;o)

Commentaire de malik7934 le 23/01/2005 22:48:46

Ah ben tiens, tous comptes fait: http://perso.wanadoo.fr/matt95/infini/INFtheorie.htm

Commentaire de Kirua le 23/01/2005 23:11:37

Eh bien voilà, c'est exactement ce que j'essayais pitoyablement d'exprimer, l'histoire de la bijection, mais n'ayant pas été convaincu moi-même, j'avais bien dû mal à convaincre.

Commentaire de coucou747 le 24/01/2005 10:54:54 administrateur CS

dans un unsigned, on a le même nombre d'éléments que dans un signed...

Je ne monopoliserais pas toutes mes neurones sur ce point, qui bien que interessant, reste profondément inutile...

@+

Commentaire de Anthomicro le 24/01/2005 19:50:19

"dans un unsigned, on a le même nombre d'éléments que dans un signed..."

Ah bon ?

Commentaire de malik7934 le 24/01/2005 20:29:41

Et oui Antho...

Si les nombres sont signés (par défaut), sur 1 octet (8 bits) on peut coder les nombres de -128 à 127. Sur 4 octets (systèmes 32 bits), un nombre signé peut aller de -2 147 483 648 à 2 147 483 647.

Si les nombres sont non signés, sur 1 octet (8 bits), on peut coder les nombres de 0 à 255. Sur 4 octets (systèmes 32 bits), un nombre signé peut aller 0 à 4 294 967 296.

... http://www.aidejavascript.com/article121.html

Commentaire de coucou747 le 24/01/2005 20:29:51 administrateur CS

unsigned char :{0;255};
signed char : {-127;128}
|-127-128|=255
|0-255|=255

Commentaire de coucou747 le 24/01/2005 20:32:02 administrateur CS

c'est prèsque du tchat ici !!

Commentaire de Anthomicro le 24/01/2005 20:33:27

Ah oui ok, je pensais pas à la même chose que vous lol

Commentaire de dream303 le 13/08/2005 15:26:36

lol
tu sais que si tu trouves un nombre premier d'au moins 100 chifrees la CIA te l'achetes 10 000 $ (enfin j'ai vu ca dans un livre) ?
Ca leur sert evidemment en cryptographie ...

Commentaire de malik7934 le 13/08/2005 15:30:21

Ben à mon avis ton livre est pas à jour. en 2003, le plus grand nombre premier faisait dans les 6 millions de chiffres, imagine 2 ans plus tard...

Alors 100 chiffres... hem...avec gmp, je pense que le problème est réglé vite fait!

Commentaire de coucou747 le 13/08/2005 16:10:12 administrateur CS

lol, ce sont des nombres qui sont sous la forme : 2^n-1, ils sont assez simples à trouver, mais ne peuvent pas servir en crypto...

les nombres classiques (premiers) de plus de 1024 bits sont vraiment interessants pour la crypto RSA...

mais la crypto quantique va bientot bouffer l'assymétrique...

Commentaire de malik7934 le 13/08/2005 16:15:35

Salut coucou747,

Je crois que tu mélanges un peu. La quantique, c'est pour l'échange de clés dans la crypto sym, c'est tout (si j'ose dire "c'est tout" :)).

Quoi qu'il en soit, l'asym a encore de beaux jours devant elle!

Commentaire de coucou747 le 15/08/2005 21:14:24 administrateur CS

c'est justement la princpale fonction de l'asym...

Commentaire de dream303 le 16/08/2005 12:02:53

Ok, dsl pour l'erreur alors !

Commentaire de coucou747 le 16/08/2005 12:23:02 administrateur CS

l'erreur n'est pe pas de toi, un grand nombre premier est très utile, la crypto quantique est assez difficile à mettre en place... je ne sais pas si on peut vendre un nombre premier, mais un nombre de fermat (2^n-1), c'est sur que non (sauf si on a le record...)

Commentaire de malik7934 le 16/08/2005 13:00:47

Pour ma part je parlais bien de nombres PREMIERS coucou747. Et oui, un nombre premier ca se vend.

La crypto quantique c'est un probleme hardware si je ne m'abuse... mais soit.

Commentaire de coucou747 le 16/08/2005 13:09:42 administrateur CS

je ne parlais que des nombres de fermats qui sont premiers...

2^2-1=3
2^3-1=7
2^5-1=31

le plus grand nombre premier calculé est un nombre de fermat...

La crypto quantique est effectivement une question de matèriel, mais elle pourrait bien (pour une organisation comme la CIA) remplacer la crypto asymétrique...
l'avantage du symétrique syr l'assymétrique, c'est la vitesse de calcul, l'avantage de l'asymétrique, c'est l'échange des clefs, donc, on se sert de l'asymétrique pour crypter des clefs symétriques et ensuite, on parles en symétrique...

La crypto quantique offre un avantage non négligeable : quand un espion lit un passage du message, ce message ne peut être renvoyé avec les mêmes caractèristiques...

la crypto quantique permetrait un échange de clefs vraiment inviolable : si on est espionné, alors on est au courant, et on procède à un nouvel échange de clefs symétriques... on n'utilises des clefs symétriques que si on n'a pas été espionné...

Commentaire de Kirua le 03/09/2005 02:52:16

dans le bouquin de Jean Luc Delhaye: merveilleux nombres premiers, il est stipulé que tous les prix pour les nombres premiers jusqu'à je sais pas combien de millions de chiffres ont été remportés, et que les prix restants s'élèvent à un demi million de dollars ... le plus gros étant attribué à la découverte d'un nombre premier de 1 milliard de chiffres décimaux: bonne chance ^^. ça ne rentre même pas dans ma ram un nombre comme ça :p. les nombres utilisés sont généralement les nombres de mersenne, dont j'ai oublié la formule générale, mais qui sont plus souvent premiers que les naturels pris au hasard, et quand on en est à cet ordre de grandeur, "plus souvent", ça compte! de mémoire, il y a environ log(n)/n nombre premiers entre 0 et n, ce qui fait franchement pas bcp ^^.

Commentaire de malik7934 le 03/09/2005 08:47:54

"de mémoire"... hehe, comme dit plus haut, suite à ta remarque "il peut arriver que ton programme en cherche un dans un intervalle qui n'en contient pas" je t'ai répondu "Théorème des nombres premiers: Le nombre de nombres premiers =< à x, noté e(x), vérifie e(x) ~ x/lnx"... pas longue la mémoire ;)

Commentaire de Kirua le 03/09/2005 12:41:40

Mouarf, j'ai hésité pour le sens de la fraction, et c'est vrai que log n / n ça fait pas bcp ^^ Enfin, l'erreur est réparée. Et puis, ça fait longtemps que je l'ai lu ton commentaire (22 janvier).

Commentaire de coucou747 le 03/09/2005 12:59:09 administrateur CS

t'as raison kirua, j'ai parlé des nombres de fermats, mais ce sont ceux de mersenne...

http://www.lifl.fr/~wegrzyno/Mersenne/mersenne1.html

2^3021377-1 est selon ce site, le plus grand nombre premier connu... je croyais que c'était plus grand...

j'ai 512 mo de ram, ma ram peut donc acceuillir 512*8*1024*1024 bits, soit 4294967296, je pourrais donc théoriquement acceuillir plus de 1000 nombres premiers de cet ordre de grandeur... c'est le cpu qui ramerais pour trouver un tel nombre

http://forums.futura-sciences.com/thread41127.html

Commentaire de Kirua le 03/09/2005 13:10:27

Non, ça fait environ 3021377 * log10(2) chiffres décimaux, ce qui fait "à peine" 909 000 chiffres environ, or dans le bouquin de JL Delhaye, qui a qq années déjà, ils évoquent déjà un record pour un nombre premier à 2 millions de chiffres, et depuis ça a sûrement évolué. Ton site ne doit pas être à jour.

Commentaire de Zakinster le 14/03/2006 17:34:29

[4 mois après]
"C'est compliqué d'agir avec l'infini... faut voir comment on le défini." ^_^...

Commentaire de Kirua le 14/03/2006 20:03:03

Ca fait même plus d'un an cette phrase-là ^^.

Commentaire de savon le 01/04/2007 00:11:47

Pas mal ca ma servi un peu
Ton code est tres bien et te laisse pas deboussoller par des br**** avec des commantaire decalés

Commentaire de coucou747 le 01/04/2007 01:24:34 administrateur CS

kirua> ouais, on voit des ups tout les ans ici :) congratulation pour prologin, on se voit dans un mois :)

Commentaire de Kirua le 01/04/2007 13:48:09

Yup, à dans un mois :). Et si tout va bien, il y aura même une team coder-studio avec T-shirts ^_^.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,544 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales