DECOMPOSITION D'UN NOMBRE EN PUISSANCES DE FACTEURS PREMIERS.

Signaler
Messages postés
94
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
13 juin 2012
-
Messages postés
192
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40446-decomposition-d-un-nombre-en-puissances-de-facteurs-premiers

Messages postés
192
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010

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...
Messages postés
3
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
24 novembre 2006

je vais aller rebosser mon php moi alors...
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

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'].'
'.$_GET['num'].' admet exactement '.$result['div'].' diviseurs';

if($result['isFirst'])
echo '
'.$_GET['num'].' est premier';
}
else echo '
'.$_GET['num'].' n\'est pas numérique ou n\'est pas un entier !';
}
?>




<form action="?" method="GET">


</form>

@ tchaOo°
Messages postés
224
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
29 mars 2009

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).
Afficher les 6 commentaires