uint64_t num1 = 0;
uint64_t num2 = 1;
uint64_t num3;

int count = 0;

void setup() 
{
  Serial.begin( 115200);
  Serial.println( "Fibonacci with 64-bit integers");
  pinMode( 13, OUTPUT);
}

void loop() 
{
  num3 = num1 + num2;
  num1 = num2;
  num2 = num3;

  Serial.print( count++);
  Serial.print( ":");
  println64( num3);

  if( count >= 94)
  {
    Serial.println( "Stopped");
    while(true)
    {
      digitalWrite( 13, digitalRead( 13) == HIGH ? LOW : HIGH);
      delay( 200);
    }
  }
}

// print a unsigned 64 bit number as decimal
void println64( uint64_t u)
{
  char buffer[25];
  buffer[24] = '\0';

  for( int i=23; i>=0; i--)
  {
    int d = (int) (u % 10);
    buffer[i] = d + '0';
    u /= 10;
  }
  Serial.println( buffer);
}