Comment faire x^n ?

Comment faire x^n ? - Algo - Programmation

Marsh Posté le 11-12-2004 à 16:22:52    

Mais attention, sans utiliser de multiplication (sinon c'est pas drôle). Juste des additions.
 
Je sais que c'est con mais je galère .....  
 
Merci par avance de votre aide ^^


---------------
/* Signature */
Reply

Marsh Posté le 11-12-2004 à 16:22:52   

Reply

Marsh Posté le 11-12-2004 à 16:25:09    

Si vous avez un bout de code en C ça irait ...


---------------
/* Signature */
Reply

Marsh Posté le 11-12-2004 à 16:41:42    

pow

Reply

Marsh Posté le 11-12-2004 à 16:55:20    

Donc x^n = tu fait une boucle qui fait n fois l'operation (X + X + ... (x fois, une boucle quoi) ... + X)
 
C'est ca non ?


Message édité par Chronoklazm le 11-12-2004 à 16:55:34
Reply

Marsh Posté le 11-12-2004 à 17:05:00    

heu ....


---------------
/* Signature */
Reply

Marsh Posté le 11-12-2004 à 17:33:08    

xPuissanceN = exp(n*ln(x))
 
De rien :jap:

Reply

Marsh Posté le 11-12-2004 à 17:46:28    

Ayuget a écrit :

xPuissanceN = exp(n*ln(x))
 
De rien :jap:


 
Il y a une multiplication  :D

Reply

Marsh Posté le 11-12-2004 à 19:38:14    

Chronoklazm a écrit :

Donc x^n = tu fait une boucle qui fait n fois l'operation (X + X + ... (x fois, une boucle quoi) ... + X)
 
C'est ca non ?


 
non :pfff:  
la tu fais n*x

Reply

Marsh Posté le 11-12-2004 à 19:38:34    

mais je suis curieux de savoir comment on fais

Reply

Marsh Posté le 11-12-2004 à 19:46:21    

Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^


---------------
/* Signature */
Reply

Marsh Posté le 11-12-2004 à 19:46:21   

Reply

Marsh Posté le 11-12-2004 à 20:03:40    

Ca revient à coder la multiplication avec des additions.
Multiplier x par x, c'est ajouter x fois x à un total.

Code :
  1. int pow( int X, int N )
  2. {
  3.     int total = X;
  4.     int n;
  5.     int i;
  6.     for ( n = 1; n < N; ++n )
  7.     {
  8.         /* multiplier total par X */
  9.         int subtotal = total;       
  10.         for ( i = 1; i < X; ++i )
  11.         {
  12.             subtotal += total;
  13.         };
  14.         total = subtotal;
  15.     }
  16.     return total;
  17. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-12-2004 à 21:29:44    

blueberry76 => j'ai dis "n fois" en sous entendant que ce serais n passage dans une boucle ou l'on fait l'operation que j'ai mis entre parenteses, donc aucune multiplication :D
 
Bein c'est bien ce que je disais (une double boucle) !


Message édité par Chronoklazm le 11-12-2004 à 21:32:51
Reply

Marsh Posté le 11-12-2004 à 22:17:20    

Y'a quand même moyen de limiter le nombre d'additions nécessaires pour calculer une multiplication. Par exemple si tu veux calculer x*5, il suffit de 3 additions : x2 = x+x, x4 = x2+x2, x5 = x4 + x.
 
Est-ce que tu as droit aux manipulations de bits ?


Message édité par matafan le 11-12-2004 à 22:17:35
Reply

Marsh Posté le 11-12-2004 à 22:21:44    

matafan a écrit :

Est-ce que tu as droit aux manipulations de bits ?

Je sens qu'on est plus loin de la masturbation intellectuelle, dans ce topic.  :whistle:  
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 11-12-2004 à 22:40:19    

Chronoklazm a écrit :

blueberry76 => j'ai dis "n fois" en sous entendant que ce serais n passage dans une boucle ou l'on fait l'operation que j'ai mis entre parenteses, donc aucune multiplication :D
 
Bein c'est bien ce que je disais (une double boucle) !


 
Ton programme realise une multiplication par n, pas une puissance  :sarcastic:  

Reply

Marsh Posté le 11-12-2004 à 22:59:54    

ah ouais c'est vrai je viens de capter ... ca fait n*(x^2) plus precisement :D

Reply

Marsh Posté le 11-12-2004 à 23:26:55    

En fait je pensé plus a des sigmas emboités :
 
Sachant que :
 
 i=X
-----
\
/     Xi  =  X1 + X2 + X3 + ... + Xi   Ca donne X^2
-----
 i=1  
 
 
Alors
 
  X       X           X
-----   -----       -----
\       \             \
/       /      ...    /        Xi     =     X^n
-----   -----       -----
  1       1           1
 
<--------------------->
          n-1  
 
On emboite donc comme ca n-1 sigmas, apres ca doit surement correspondre a ce que fait helloworld en implementé.


Message édité par Chronoklazm le 11-12-2004 à 23:31:23
Reply

Marsh Posté le 11-12-2004 à 23:31:29    

gilou a écrit :

Je sens qu'on est plus loin de la masturbation intellectuelle, dans ce topic.  :whistle:  
A+,

il est temps de ce prendre en main

Reply

Marsh Posté le 11-12-2004 à 23:37:00    

Je pense qu'on peut l'implementer sans boucles de facon recursive.
 
Genre un truc du style
 

Code :
  1. int somme(int x, int n){
  2.   if (n == 1)
  3.       return x;
  4.   else
  5.       return x + somme(x, (n - 1));}
  6. int pow(int x, int n){
  7.   if (n == 2)
  8.       return somme(x, x);
  9.   else
  10.       return somme(x, pow(x, (n - 1)));}


 
Et voilà :) tout ceci sans aucune variable suplementaire mais une pile bien pleine :)


Message édité par Chronoklazm le 12-12-2004 à 00:05:38
Reply

Marsh Posté le 12-12-2004 à 00:10:38    

pascal_ a écrit :

Il y a une multiplication  :D


ouais mais juste une :D
Si il en veut pas il peut faire
 
 
                            n
xPuissanceN = exp(:sum: ln(x))
                            1
 
:jap:


Message édité par Ayuget le 12-12-2004 à 00:11:17
Reply

Marsh Posté le 12-12-2004 à 00:11:10    

Taz a écrit :

il est temps de ce prendre en main


 
faudrait voir a se secouer un peu

Reply

Marsh Posté le 12-12-2004 à 00:13:49    

Kalimuxo a écrit :

Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^


 
 :jap:

Reply

Marsh Posté le 12-12-2004 à 00:31:46    

somme(x, pow(x, (n - 1)));
 
 
un petit effort et tu tombes su Ackermann

Reply

Marsh Posté le 12-12-2004 à 00:38:51    

un petit peu de recursivité n'a jamais fait de mal à personne voyons :)

Reply

Marsh Posté le 12-12-2004 à 00:39:33    

quand elle n'est pas terminale, si

Reply

Marsh Posté le 12-12-2004 à 00:41:20    

Bon là l'enveloppe n'est pas associative (je crois), mais donne moi une lambda et je t'ecrit ca en CPS si tu veux :D

Reply

Marsh Posté le 12-12-2004 à 00:59:36    

Chronoklazm a écrit :

Je pense qu'on peut l'implementer sans boucles de facon recursive.
 
Genre un truc du style
 

Code :
  1. int somme(int x, int n){
  2.   if (n == 1)
  3.       return x;
  4.   else
  5.       return x + somme(x, (n - 1));}
  6. int pow(int x, int n){
  7.   if (n == 2)
  8.       return somme(x, x);
  9.   else
  10.       return somme(x, pow(x, (n - 1)));}


 
Et voilà :) tout ceci sans aucune variable suplementaire mais une pile bien pleine :)


 
pow(1, 0);  winner!  :sol:

Reply

Marsh Posté le 12-12-2004 à 01:06:56    


Code :
  1. int somme(int x, int n){
  2.    if (n == 1)
  3.        return x;
  4.    else
  5.        return x + somme(x, (n - 1));}
  6. int pow-iter(int x, int n, int k){
  7.    if (n == 2)
  8.        return k;
  9.    else
  10.        return pow-iter(x, (n - 1), somme(x, k));}


 
Et en faisant pow-iter(x, n, somme(x,x)) pour le lancement ...
 
Elle est terminale maintenant ?

Reply

Marsh Posté le 12-12-2004 à 01:08:41    

=>Ace 17 : Ah là t'a cassé le délire :D

Reply

Marsh Posté le 12-12-2004 à 01:15:18    

quitte a faire de la recursivite terminale autant passer en iteratif!

Reply

Marsh Posté le 12-12-2004 à 01:20:18    

Code :
  1. int somme(int x, int n){
  2.    if (n == 1)
  3.        return x;
  4.    else
  5.        return x + somme(x, (n - 1));}
  6. int pow-iter(int x, int n, int k){
  7.  
  8.    if (n == 0) return 1;
  9.    else if (n == 1) return x;   
  10.    else if (n == 2) return k;
  11.    else return pow-iter(x, (n - 1), somme(x, k));}


 
Voilà quoi ! :kaola:
 
EDIT : C'est sur :jap: et bien c'est ce que je fais .


Message édité par Chronoklazm le 12-12-2004 à 01:21:35
Reply

Marsh Posté le 12-12-2004 à 01:25:30    

D'ou on pourrait tirer une conclusion hative ... les boucles for, while et cie c'est du mytho !

Reply

Marsh Posté le 12-12-2004 à 01:49:25    

Merci les gens ^^
 
Sinon autre problème :
 
a<--- a +1 OK
a<---- a + b MAL
a<----- a + 2 MAL
 
En gros faire x^n avec uniquement des manipulations avec des 1...
 


---------------
/* Signature */
Reply

Marsh Posté le 12-12-2004 à 03:06:22    

et bien tu as x*x*x*x...
et le * tu le re-génères, en faisant des + avec décalages comme en CM1/CE2 (je sais plus quand est-ce que l'on apprends à faire des multiplications)

Reply

Marsh Posté le 12-12-2004 à 03:08:14    

ou une bête boucle suis-je bête...
 
bon je sors il est tard pour mon cerveau :D

Reply

Marsh Posté le 12-12-2004 à 09:16:12    

while (n) n*=n--
 
Ah merde, on avait dit pas de multiplication ...


Message édité par kadreg le 12-12-2004 à 09:17:09

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-12-2004 à 12:17:39    

x^n : C'est ( ( x^(n-1) - 1 ) * n ) Additions de 1.
 
Genre
 
res = x;
 
Tantque ((res - x) != ( x^(n-1) - 1 ) * n )) faire
res++;
 
resultat res;
 
Mais bon là je triche un peu :D


Message édité par Chronoklazm le 12-12-2004 à 12:19:16
Reply

Marsh Posté le 12-12-2004 à 12:20:39    

kadreg a écrit :

while (n) n*=n--
 
Ah merde, on avait dit pas de multiplication ...


 
surtout que je suis pas convaincu que ca marche, ton truc, ca sort plutot la factorielle


Message édité par chrisbk le 12-12-2004 à 12:20:52
Reply

Marsh Posté le 12-12-2004 à 14:09:57    

Chronoklazm a écrit :


Mais bon là je triche un peu :D


 
mdr !
 
Un peu ?
 
res:=0
tant que res!= x^n faire
res:= res+1;
fin tq;
aussi ?
 
^^


---------------
/* Signature */
Reply

Marsh Posté le 12-12-2004 à 19:13:44    

Personne n'a d'idée ?


---------------
/* Signature */
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed