Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DECOMPOSITION D'UN NOMBRE EN PUISSANCES DE FACTEURS PREMIERS.


Information sur la source

Catégorie :Maths & Algorithmes Classé sous : nombres, premier, euclide, pgcd, ppcm Niveau : Débutant Date de création : 23/11/2006 Date de mise à jour : 30/11/2006 20:13:55 Vu : 8 030

Note :
Aucune note

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

1ere source ici, le code décompose un nombre en produits de facteurs premiers, par exemple en entrant 1256 , la page vous sortira 1256 = 2^3*157^1.
si vous entrez deux nombres, le script cherche le PGCD grace a l'algorithme d'euclide, puis l'affiche, ainsi que le PPCM.
Chaque facteur est ensuite stocké dans une valeur d'un array $prem, et donc facilement evolutif.
script en ligne sur http://tpepetrole0506.free.fr/navette/fact2.php

 

Source

  • <?php
  • $f1 = $_GET['a'];
  • $f2 = $_GET['b'];
  • function prems($num)
  • {
  • if ( $num != "" ) {
  • $a = 2;
  • $h1 = $num;
  • echo "$num = ";
  • while ($num > 1) {
  • $b = $num / $a;
  • if (is_int($b)) {
  • $num = $b;
  • $fact = "$fact $a";
  • }
  • else {
  • $a++;
  • }
  • }
  • $o = 1;
  • $m = 1;
  • $d = 1;
  • $prem["$h1"] = explode(" ", $fact);
  • while($o < count($prem["$h1"])) {
  • if ($prem["$h1"][$o] == $prem["$h1"][$o + 1]) {
  • $m = $m + 1;
  • }
  • if ($prem["$h1"]["$o"] != $prem["$h1"][$o + 1]) {
  • if ($o + 1 == count($prem["$h1"])) {
  • echo $prem["$h1"]["$o"] ."^". $m;
  • $d = $d * ($m + 1);
  • }
  • else {
  • echo $prem["$h1"]["$o"] ."^". $m ."*";
  • $d = $d * ($m + 1);
  • }
  • $m = 1;
  • }
  • $o++;
  • }
  • echo "<br>". $h1 ." admet exactement ". $d ." diviseurs<br>";
  • if ( $d == 2 ) {
  • echo $h1 . " est premier </br><br>";
  • }
  • }
  • }
  • prems($f1);
  • prems($f2);
  • function PGCD($a,$b) {
  • $r = fmod($a,$b);
  • $p = $b;
  • while ( fmod($a,$b) != 0 ) {
  • $r = fmod($a,$b);
  • $a = $b;
  • $b = $r;
  • if ( fmod($a,$b) == 0) {
  • return ($b);
  • }
  • }
  • if ($r == 0) {
  • return ($p);
  • }
  • }
  • $pgcd = PGCD($f1,$f2);
  • echo "<br>PGCD(".$f1.",".$f2.")=". $pgcd;
  • $ppcm = ( $f1 * $f2 ) / $pgcd;
  • echo "</br>PPCM(".$f1.",".$f2.")=". $ppcm;
  • ?>
  • <form action="" method=GET><input type=text name="a" value="<?php echo $_GET['a']; ?>"/><input type=text name="b" value="<?php echo $_GET['b']; ?>"/><input type=submit value="Submit" style="background:aqua"/></form>
<?php
$f1 = $_GET['a'];
$f2 = $_GET['b'];
function prems($num) 
{
if ( $num != "" ) {
$a = 2;
$h1 = $num;
echo "$num = ";
while ($num > 1) {
$b = $num / $a;
if (is_int($b)) {
$num = $b;
$fact = "$fact $a";
}
else {
$a++;
}
}
$o = 1;
$m = 1;
$d = 1;
$prem["$h1"] = explode(" ", $fact);
while($o < count($prem["$h1"])) {
if ($prem["$h1"][$o] == $prem["$h1"][$o + 1]) {
 $m = $m + 1;
}
if ($prem["$h1"]["$o"] != $prem["$h1"][$o + 1]) {
 if ($o + 1 == count($prem["$h1"])) {
 echo $prem["$h1"]["$o"] ."^". $m;
 $d = $d * ($m + 1);
 }
 else {
 echo $prem["$h1"]["$o"] ."^". $m ."*";
 $d = $d * ($m + 1);
 }
$m = 1;
}
$o++;
}
echo "<br>". $h1 ." admet exactement ". $d ." diviseurs<br>";
if ( $d == 2 ) {
echo $h1 . " est premier </br><br>";
}
}
}
prems($f1);
prems($f2);


function PGCD($a,$b) {
$r = fmod($a,$b);
$p = $b;
while ( fmod($a,$b) != 0 ) {
$r = fmod($a,$b);
$a = $b;
$b = $r;
if ( fmod($a,$b) == 0) {
return ($b);
}
}
if ($r == 0) {
return ($p);
}
}
$pgcd = PGCD($f1,$f2);
echo "<br>PGCD(".$f1.",".$f2.")=". $pgcd;
$ppcm = ( $f1 * $f2 ) / $pgcd;
echo "</br>PPCM(".$f1.",".$f2.")=". $ppcm;




?>
<form action="" method=GET><input type=text name="a" value="<?php echo $_GET['a']; ?>"/><input type=text name="b" value="<?php echo $_GET['b']; ?>"/><input type=submit value="Submit" style="background:aqua"/></form>

Historique

24 novembre 2006 13:11:43 :
24/11/06: le script genere maintenant le nombre exact de diviseurs, et indique si le nombre entré est premier ou pas
29 novembre 2006 18:46:36 :
rajout PGCD + PPCM
30 novembre 2006 20:13:56 :
rectification d'un mauvais c/c

Commentaires et avis

signaler à un administrateur
Commentaire de Mastronic le 23/11/2006 23:12:20

Hello,

Pas si simple ce script.. bravos
Peut tu nous indiquez un example d'utilisation ce cette fonctionnalité.

Attention, ton script peut vite saturé bloqué des process..
Imagine si on saisie un grand nombre... (temps execution enorme)
il faudrait se tenir à un maximum.

signaler à un administrateur
Commentaire de DarkTyranus le 24/11/2006 13:08:41

exemple d'utilisation...
euh je l'ai crée pour m'aider dans mes devoirs de spe maths niveau T°S (a l'origine je l'avais ecrit pour ma calculette)
bien sur on peut vite l'adapter pour trouver le pgcd, ppcm, et par extension en cryptographie.

sinon vu qu'il s'agit d'un script à usage personnel, je n'ai pas mis de maximum ou de script limitant l'entrée de characteres autres que des chiffres.

signaler à un administrateur
Commentaire de rambc le 24/11/2006 15:18:55

Une petite remarque...

Pour le PGCD, il vaut mieux utiliser l'agiorithme d'Euclide (plus rapide sur les grands nombres).
Pour le PPCM, il suffit d'utiliser PPCM(A;B)=A×B/PGCD(A;B).

signaler à un administrateur
Commentaire de kankrelune le 24/11/2006 15:47:36

Ton tableau $prem n'étant pas censé évoluer en cours de boucle il est inutile d'appeler count dans cette dernière... .. .

Préférer les simples quotes aux doubles quotes... .. .

$fact = "$fact $a";

S'écrira

$fact .= ' '.$a;

de même pour

$m = $m + 1;            =>    $m += 1;
$d = $d * ($m + 1);     =>    $d *= ($m + 1);

Moi j'aurais bien vu lke tout sous forme de fonction... .. .

<?php

if(isset($_GET['num']) && !empty($_GET['num']))
{
function getFactor($n)
{
if(!is_numeric($n))
return false;
elseif(is_float($n))
return false;
elseif(!is_int($n)) // string ?
{
if(strpos($n,'.') !== false)
return false;
}

$fact = $n.' = ';

$a = 2;
while ($n > 1)
{
$b = $n / $a;

if (is_int($b))
{
$n = $b;
$f .= ' '.$a;
}
else $a++;
}

$o = 1;
$m = 1;
$d = 1;
$prem = explode(' ', $f);
$count = count($prem);

while($o < $count)
{
if ($prem[$o] === $prem[$o + 1])
$m += 1;

if ($prem[$o] !== $prem[$o + 1])
{
if ($o + 1 === $count)
{
$fact .= $prem[$o] .'^'. $m;
$d *= ($m + 1);
}
else
{
$fact .= $prem[$o] .'^'. $m .'*';
$d *= ($m + 1);
}
$m = 1;
}
$o++;
}

return array(
'fact' => $fact,
'div' => $d,
'isFirst' => ($d === 2)
);
}

$result = getFactor($_GET['num']);

if($result !== false)
{
echo $result['fact'].'<br />'.$_GET['num'].' admet exactement '.$result['div'].' diviseurs';

if($result['isFirst'])
echo '<br />'.$_GET['num'].' est premier';
}
else echo '<br />'.$_GET['num'].' n\'est pas num&eacute;rique ou n\'est pas un entier !';
}
?>
<br />
<br />
<form action="?" method="GET">
<input type="text" name="num" />
<input type="submit" value="Submit" style="background:aqua" />
</form>

@ tchaOo°

signaler à un administrateur
Commentaire de DarkTyranus le 24/11/2006 17:00:51

je vais aller rebosser mon php moi alors...

signaler à un administrateur
Commentaire de Astalavista le 13/12/2006 13:41:46

Domage que tu soit chez free, si tu fait du développement en local, il existe des fonctions bien utile  : Fonctions GMP
Sinon ton code source est pas mal.
Bonne continuation...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Réactualisation d'une page tjrs en premier plan. Help :) [ par lechti62 ] Bonjour j'ai une pag dans uen frame qui s'actualise toutes les 2 secondes de cette façon&lt;head&gt;&lt;meta http-equiv="refresh" content="2"&gt;&lt;/ MySQL - Ordonner des nombres [ par psychodingue ] Alors voilà mon prob:Je voudrai ordonner par ordre inverse des nombres, alors j'me connecte à ma base de donner puis je fait:ORDER BY clics DESCJe fou Splitter un texte en nombres [ par JMGR ] Je cherche à stocker les forum déja vus par les utilisateurs d'un forum que je crée, mais je ne désire pas utiliser le cookies qui sont je trouve, com Premier pas et Pb avec phpmyadmin [ par gege1024 ] voila, je desire passer d'un site statique à un site dynamique,comme je ne compte pas faire de mon ordi un serveur, j'ai ouvert un compte php3 sur fre SVP : Aide pour mon premier formulaire. [ par davggy ] Salut à tous.Je suis tout tout débutant et très intrigué par les capacités du PHP.Mon premier souhait est de récupérer par mail les informations fourn Nombres entier [ par ekinoks ] he... escusé moi mais he .... comment on fait pour avoir que les nombres entier de nombres decimoexemple :&lt;?$truk = 3/2;echo $truk; //g envi qeu ic Grille de nombres [ par Tomcube ] Salu,J'shui en train de faire un script de loto.A peine commencé, déjà un truc qui m'énerve : la grille de nombres. Je veux faire la même grille que s Nombres de jours entre 2 dates! [ par jimmy69 ] Bonjour a tous,Voila j'ai un p'tit stress ....si quelqu'un pouvait m'aider!En fait j'enregistre mes donnees ds une table mysql , des donnees comme le valeur tronquée au premier espace [ par Prosper ] Bonjour,Je butte sur un truc con depuis un bout de temps et je n'arrive pas à trouver pkoi .Voila le probleme :je dispose d'un formulaire comprenant u Suite de nombres [ par jak123 ] Bonjour, j'ai codé une page photos, mon seul hic c'est que j'aimerai que mon chiffre 1 sur mon code ci-dessus, prenne les valeurs de 1 au nombre que j


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.