Qu'est-ce que la Somme de Même des Termes De Fibonacci (<4 millions)? [Grande Valeur De Type De Données De La Confusion]
En commençant par 1 et 2, les 10 premiers termes de la suite de Fibonacci sera:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Trouver la somme de toutes la même valeur de termes dans la séquence qui ne dépasse pas 4 millions de dollars.
Maintenant, j'ai eu l'idée pour savoir comment faire cela. Mais je suis confus sur les types de données à conserver ces big data. J'obtiens des résultats bizarres avec int
. 🙁
PLUS: Son Projet Euler 2ème question. Mais je ne peux pas l'obtenir. Je me fou des valeurs comme réponse. Quelqu'un peut s'il vous plaît poster le programme idéal?
EDIT: Voici ce que j'ai écrit juste l'impression de Fibonacci à l'écran. Nu De Base. Ma variable est fou, même quand je me donne à 100 pour la limite. Est mon code de mal?
//Simple Program to print Fibonacci series in Console
#include <stdio.h>
int main() {
int x=1,y=2,sum=0,limit=0,i=0,temp=0;
printf("Enter Limit:");
scanf("%d",&limit);
if(limit==1)
printf("%d",x);
else if(limit>1) {
printf("%d %d",x,y);
if (limit>2) {
while (i<limit-2) {
temp=y;
sum=x+y;
x=temp;
y=sum;
printf(" %d",sum);
i++;
}
}
}
printf("\n");
return 0;
}
RÉSOLU: en Fait, j'ai réussi à obtenir la solution moi-même. Voici mon programme. Elle fonctionne.
#include <stdio.h>
int main() {
int x=1,y=2,sum,limit; //Here value of first 2 terms have been initialized as 1 and 2
int evensum=2; //Since in calculation, we omit 2 which is an even number
printf("Enter Limit: "); //Enter limit as 4000000 (4million) to get desired result
scanf("%d",&limit);
while( (x+y)<limit ) {
sum=x+y;
x=y;
y=sum;
if (sum%2==0)
evensum+=sum;
}
printf("%d \n",evensum);
return 0;
}
Cela ressemble plus à un ProjetEuler problème alors devoirs à la maison pour moi.
En fait, oui, c'est un Projet Euler problème. Mais je ne peux pas le faire fonctionner. Mon programme me donne l'-cinq valeurs et tout comme le résultat 🙁
OriginalL'auteur r0ach | 2009-10-29
Vous devez vous connecter pour publier un commentaire.
Puisque vous ne voulez jusqu'à quatre millions de dollars, il est probable que
int
n'est pas votre problème.C'est tout à fait possible que votre programme est buggé et que le stockage de données est tout simplement parfait, de sorte que vous devez tester votre programme sur les petites valeurs. Par exemple, il est clair que la somme des trois premiers de même des termes est de 44 (astuce: chaque troisième terme est le même) donc, si vous exécutez votre programme avec un plafond de 50, alors vous devriez obtenir instantanément 44 en arrière. Continuer à courir petit test des cas pour obtenir la confiance dans les grands.
OriginalL'auteur jprete
Pour plus de sécurité, utiliser le "long" type de données, la norme exige que pour tenir au moins 4 milliards de dollars, mais sur la plupart des machines, 'int' organisera également des 4 milliards de dollars.
OriginalL'auteur Jonathan Leffler
Essayez de changer ce:
à ceci:
Comme l'écrit, votre programme est à vélo jusqu'à ce qu'il arrive à le 4 millionième nombre de Fibonacci (c'est à dire quand j'arrive à 4 millions de dollars, bien que le débordement évidemment survient en premier). La boucle devriez vérifier pour voir si y (le plus grand nombre de Fibonacci) devient supérieure à 4 millions de dollars.
OriginalL'auteur bbg
Je ne suis pas un programmeur, mais voici une adaptation de Leffler du code sans le SI-critère. Il doit travailler pour MAX_VALUES au-dessus de 2 (donné qu'il n'existe pas d'erreurs dans la syntaxe de programmation), basé sur un modèle que j'ai trouvé dans le même-seulement la suite de fibonacci: 0,2,8,34,144,610,2584... donc il est intéressant de noter: f_n2 = 4*f_n1 + f_n0. Cela signifie aussi ce programme a besoin seulement de 1/3ème de calculs, car il n'a même pas envisager/calculer l'impair de nombres de fibonacci.
OriginalL'auteur user12656
int
est assez grand pour les valeurs dans les millions sur presque tous les système moderne, mais vous pouvez utiliserlong
si vous êtes inquiet à ce sujet. Si cela vous donne des résultats bizarres, alors le problème est avec votre algorithme.int
etlong
dépend du langage de programmation, système d'exploitation, et de l'architecture du PROCESSEUR. Sur x86 avec C sur Linux, ils sont à la fois 32 bitsEt sur x86_64 avec C sous Windows, ils sont toujours à la fois 32 bits.
Je suis sur Mac Leopard. C'est encore 32bit droit?
OriginalL'auteur mob
Utilisation BigInt.
Puis de nouveau,
unsigned int
stocke les valeurs jusqu'à plus de 4 milliards de dollars, de sorte que vous ne devriez pas avoir de problèmes, même avec "la somme de tous les nombres de fibonacci jusqu'à 4 millions de dollars" (ce qui, évidemment, doit être de moins de 8 mil)?Les spécificateurs de Format comme dans
printf()
? Que pourrait être la un problème, si ce n' le problème. Quels types de données que vous utilisez, et quelle conversion des prescripteurs utilisez-vous pour la sortie?OriginalL'auteur Dunya Degirmenci
Un bug que vous avez probablement vu est la mauvaise mise en forme de vos instructions printf ().
Avec un printf("%d %d"), suivie par un printf(" %d"), les numéros de 3, 5, 8, 13, 21, 34, 55 s'impriment comme:
3 5 813 21 3455
qui ressemble certainement funky sortie avec sauvagement inapproprié numéros.
Vous avez besoin d'un peu plus d'espaces ou des sauts de ligne: printf("%d %d\n") printf(" %d\n").
Aussi, je ne vois pas où vous êtes réellement en vérifiant uniquement pour les même termes pour contribuer à la somme.
OriginalL'auteur Hellion
Votre programme imprime F_1 + ..+ F_limit et pas F_1 + ... F_n avec F_n < limite comme vous l'avez décrit.
Vérifier l'article de Wikipédia sur Nombres De Fibonacci et Sloane A000045: la suite de Fibonacci croît de façon exponentielle. La vérification de cette table F_48 = 4807526976 qui dépasse int. F_100 est 354224848179261915075 qui a certainement déborde même int64_t (la pile n'est pas, cependant).
OriginalL'auteur Alexandru
Les gars, j'ai eu la réponse. J'ai confirmé le résultat et int pouvez le manipuler. Voici mon programme:
Merci pour toutes les réponses et de l'aide. "Réflexion sur mes pieds" à la rescousse 🙂
OriginalL'auteur r0ach
Une drôle de solution est d'utiliser la forme fermée pour les séquences de Fibonacci et la forme fermée pour les progressions géométriques. La fin de la solution ressemble à ceci:
où
avec toutes les mises en garde concernant le double, int-conversions de type de cours.
OriginalL'auteur micans
Chaque nouveau terme à la séquence de Fibonacci est généré en ajoutant les deux précédentes conditions. En commençant par 1 et 2, les 10 premiers termes seront:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
En considérant les termes de la suite de Fibonacci dont les valeurs ne dépassent pas quatre millions de dollars, la somme de la valeur des termes.
OriginalL'auteur Vivek Sharma
Voici mon programme:
Parce que si vous regardez la suite de fibonacci (lors de la première quelques-uns même des numéros)
2 8 34 144 610 2584 ... vous verrez qu'il correspond au modèle que
next_number = current_number * 4 + previous_number.
C'est l'une des solutions. Si le résultat est 4613732
OriginalL'auteur anicicn
Vous pouvez essayer le code ci-dessous.
OriginalL'auteur amit325
Vous pouvez utiliser le code ci-dessus.
Nous pouvons faire mieux que cela en O(log n) fois. En outre, une 2 × 2 de la matrice et d'un vecteur à deux dimensions peuvent être multipliés à nouveau en O(1) fois. Donc il suffit de calculer Mn.
Le récursive de l'algorithme calcule Mn
Nous avons T(n) = T(n/2) + O(1), et par le maître du théorème T(n) = O(log n)
Vous pouvez également utiliser la récurrence de Même de la suite de Fibonacci est:
EFn = 4EFn-1 + EFn-2
avec des valeurs de départ
EF0 = 0 et EF1 = 2.
OriginalL'auteur danish_imam
LA SOLUTION LA PLUS SIMPLE SERAIT:-
OriginalL'auteur Satwaghole