2017-09-23 1 views
-2

Je veux trouver une formule pour faire ce calcul sur un projet de programmation mais je ne peux pas trouver le nom de ce terme. Disons que j'ai un numéro 3. Tout d'abord je dois trouver tous les numéros jusqu'à ce nombre .. si { 1, 2, 3 } Maintenant, je dois ajouter les numérossomme des nombres consécutifs jusqu'au nombre donné

((1) + (2) + (3) + (1 + 2) + (1 + 3) + (2 + 3) + (1 +2 +3)) = 24 

Comment ce terme est appelé et est-il une formule pour cela? J'ai essayé différentes méthodes en php pour accomplir cette tâche mais ma formule est fausse. Merci pour votre aide

+0

Voulez-vous dire que vous avez besoin tous les entiers positifs consécutifs avant le numéro? – synchronizer

+0

@synchronizer oui, tous les numéros consécutifs jusqu'au nombre donné. – Rafael

+0

Il semble que vous calculiez la somme de tous les sous-ensembles de l'ensemble 1, ... n. – synchronizer

Répondre

0

Pour des problèmes comme celui-ci, j'écris habituellement les premiers exemples et je vois où cela me mène, c'est-à-dire si je vois des motifs.

f(2) = 
(1)+(2) 
+(1+2) 
= 2*(1+2) = 6 

f(3) = 
(1)+(2)+(3) 
+(1+2)+(1+3)+(2+3) 
+(1+2+3) 
= 4*(1+2+3) = 24 

f(4) = 
(1)+(2)+(3)+(4) 
+(1+2)+(1+3)+(1+4)+(2+3)+(2+4)+(3+4) 
+(1+2+3)+(1+2+4)+(1+3+4)+(2+3+4) 
+(1+2+3+4) 
= 8*(1+2+3+4) = 80 

Le problème simplifie jusqu'à:

f(x) = 2^(x-1)*(x+(x-1)+...+2+1) 

En outre, la formule de (x+(x-1)+...+2+1) est connu, qui est x*(x+1)/2. , La formule est donc:

f(x) = 2^(x-1)*x*(x+1)/2 

Cependant, nous pouvons simplifier davantage 2^(x-1)/2-2^(x-2).

Par conséquent, la formule finale est:

f(x) = 2^(x-2)*x*(x+1) 

Essayer quelques exemples pour vérifier que cela fonctionne:

f(2) = 2^(0)*2*3 = 6 

f(3) = 2^(1)*3*4 = 24 

f(4) = 2^(2)*4*5 = 80