You can work with the type unsigned long long
which has the size of 64bits
, making it possible to generate Fibonacci sequences of up to 91
numbers:
#include <stdio.h>
#include <stdlib.h>
#define MAX_FIBO_SEQ (91)
typedef unsigned long long uint64_t; /* ( (2^64) - 1 ) = 18.446.744.073.709.551.615 max. */
int fibonacci( uint64_t f[], int n )
{
int i = 0;
if( n <= 0 )
return -1;
if( n > MAX_FIBO_SEQ )
n = MAX_FIBO_SEQ; /* Nao permite overflow */
f[0] = 1;
if( n == 1 )
return n;
f[1] = 1;
if( n == 2 )
return n;
for( i = 2; i < n; i++ )
f[i] = f[i - 2] + f[i - 1];
return n;
}
int main( int argc, char * argv[] )
{
int i = 0;
int n = atoi(argv[1]);
uint64_t seq[ MAX_FIBO_SEQ ];
/* Preenche array 'seq' com uma sequencia dos 'n' primeiros
numeros da serie de Fibonacci... */
n = fibonacci( seq, n );
/* Exibe array */
for( i = 0; i < n; i++ )
printf("%s%lld", (i)?", ":"", seq[i] );
printf("\n");
return 0;
}
Test #1:
$ ./fibo 10
1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Test #2:
$ ./fibo 91
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, 4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, 72723460248141, 117669030460994, 190392490709135, 308061521170129, 498454011879264, 806515533049393, 1304969544928657, 2111485077978050, 3416454622906707, 5527939700884757, 8944394323791464, 14472334024676221, 23416728348467685, 37889062373143906, 61305790721611591, 99194853094755497, 160500643816367088, 259695496911122585, 420196140727489673, 679891637638612258, 1100087778366101931, 1779979416004714189, 2880067194370816120, 4660046610375530309
Thanks!! Improved the same code well
– Lucas Katayama