begin process at 2012 02 15 20:00:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > DECOMPOSITION D'UN NOMBRE EN PUISSANCES DE FACTEURS PREMIERS.

DECOMPOSITION D'UN NOMBRE EN PUISSANCES DE FACTEURS PREMIERS.


 Information sur la source

Note :
Aucune note
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 :11 156

Auteur : DarkTyranus

Ecrire un message privé
Site perso
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

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

 Sources en rapport avec celle ci

CRIBLE D'ÉRATOSTHÈNE - LES NOMBRES PREMIERS par Astalavista
Source avec Zip Source avec une capture SPIRALE D'ULAM ( NOMBRES PREMIERS ) par jodzi
TABLEAU DE NOMBRES ENTIERS ALÉATOIRES, TOUS DIFFÉRENTS OU NO... par BreakingCentral
Source avec Zip ALGORITHME D'EUCLIDE OU DIVISIONS SUCCÈSSIVES : CALCULE DU P... par canibale
PGCD : ALGORITHME D'EUCLIDE PAR RECURSIVITÉ par iow4

Commentaires et avis

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.

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.

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).

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°

Commentaire de DarkTyranus le 24/11/2006 17:00:51

je vais aller rebosser mon php moi alors...

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...

Comparez les prix

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 : 0,421 sec (3)

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