Coder facteur 2 en PHP

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
cryborg
Messages: 7
Enregistré le: 15 Déc 2006, 18:25

Coder facteur 2 en PHP

par cryborg » 15 Déc 2006, 18:28

Bonjour !

Je me doute que ce doit être d'une facilité enfantine pour de vrais matheux, mais pour le pauvre littéraire que je suis, c'est un vrai mystère... Pour tout dire, je ne suis même pas sûr que ce soit une factorisation... Bref...

Je voudrais, par exemple à partir du nombre 23, retrouver les nombres qui le composent (dans ce cas, 16+4+2+1).

Même sans avoir le code PHP lui-même, si quelqu'un pouvait me donner la formule qui permettrait de faire ça...

Merci beaucoup !!



anima
Membre Transcendant
Messages: 3762
Enregistré le: 15 Sep 2006, 11:00

par anima » 15 Déc 2006, 18:38

cryborg a écrit:Bonjour !

Je me doute que ce doit être d'une facilité enfantine pour de vrais matheux, mais pour le pauvre littéraire que je suis, c'est un vrai mystère... Pour tout dire, je ne suis même pas sûr que ce soit une factorisation... Bref...

Je voudrais, par exemple à partir du nombre 23, retrouver les nombres qui le composent (dans ce cas, 16+4+2+1).

Même sans avoir le code PHP lui-même, si quelqu'un pouvait me donner la formule qui permettrait de faire ça...

Merci beaucoup !!


Tu vas t'amuser, crois-moi.
Ce que tu dois faire, c'est une double boucle. Oui oui, tu m'as bien entendu. Un truc du genre
[php]function factor($number=1) {
$cn = $number; // Tu vas voir pourquoi après
for($i=2;$i<=$cn;$i++) {
if ($cn/$i == int($cn/$i)) {
$factors[] = $i;
$cn /= $i;
$i = 2;
}
}
return $factors;
}[/php]

(codé en 30 secondes). Ce code te ressort un array avec les facteurs :we:

Par contre...pour ton truc d'addition...J'ai une idée. Tu sais utiliser le binaire? Si oui, tu prends ton nombre, tu le passe dans decbin(), et chaque nombre sera une puissance de 2.

maturin
Membre Irrationnel
Messages: 1193
Enregistré le: 09 Nov 2006, 16:28

par maturin » 15 Déc 2006, 18:39



si tu veux le trouver tu prends la fonction log_2(x)=\frac{ln(x)}{ln(2)}
si tu prends ça te donne le rang du coef de la puissance 2 la plus élevée.
pour trouver le coef suivant tu prends et tu recomences.


Sinon si tu veux juste avoir le résultat tu te sers d'une calculette (par exemple celle de windows en mode scientifique) tu rentres ton nombre 23 en décimale et tu cliques sur binaires. Ca te donne l'emplacement des coef.

cryborg
Messages: 7
Enregistré le: 15 Déc 2006, 18:25

par cryborg » 15 Déc 2006, 19:06

Merci pour vos réponses !

@maturin : euh désolé, mais je n'ai pas compris grand chose, étant tout sauf matheux...

@anima : ton code me semblait prometteur, mais il retourne de drôles de choses : pour 20, au lieu de 16 et 4, il retourne 2 et 5... Et pour 32, il retourne 2, 4 et 4...

EDIT :
il existe en PHP la fonction decbin() qui donne la représentation binaire d'un nombre. C'est exactement ce que je recherchais :)
Merci encore pour vos réponses !

anima
Membre Transcendant
Messages: 3762
Enregistré le: 15 Sep 2006, 11:00

par anima » 15 Déc 2006, 19:33

cryborg a écrit:Merci pour vos réponses !

@maturin : euh désolé, mais je n'ai pas compris grand chose, étant tout sauf matheux...

@anima : ton code me semblait prometteur, mais il retourne de drôles de choses : pour 20, au lieu de 16 et 4, il retourne 2 et 5... Et pour 32, il retourne 2, 4 et 4...


Je me suis planté dans le code que tu voulais. Je pensais une décomposition en facteurs :hum: (2*5 = 20; 2*4*4 = 32)

Pour ce qui est de maturin, je t'en écris un autre pour toi ;)
[php]function addn($number) {
$nb = array_reverse(str_split(decbin($number)));
for ($p=0; $p<count($nb);$p++) {
if ($nb[$p] == '1') $adds[] = pow(2,$p);
}
return $adds;
}
function str_split($str, $nr=1) {

//Return an array with 1 less item then the one we have
return array_slice(split("-l-", chunk_split($str, $nr, '-l-')), 0, -1);

}[/php]
[/php]

cryborg
Messages: 7
Enregistré le: 15 Déc 2006, 18:25

par cryborg » 16 Déc 2006, 10:40

Superbe anima !!!

C'est exactement ce que je voulais, ça marche nickel :)

Merci beaucoup et peut-être à bientôt ! :)

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 46 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite