Skip to content

Instantly share code, notes, and snippets.

@Francis-Njoku
Created January 6, 2020 04:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Francis-Njoku/3c6421e850fe022ef4e2078f7c8ee079 to your computer and use it in GitHub Desktop.
Save Francis-Njoku/3c6421e850fe022ef4e2078f7c8ee079 to your computer and use it in GitHub Desktop.
Fibonacci sequence with index of first term to contain 1000 digits
<?php
// Function to generate fibonacci sequence that contains large numbers
function getFibonacci() {
$i = '0';
$k = '1'; //first fibonacci value
yield $k;
while(true) {
// gmp_add to add two gmp number (www.php.net/manual/en/ref.gmp.php)
$k = gmp_add($i, $k);
// gmp_subtract to subtract $i from $k
$i = gmp_sub($k, $i);
yield $k;
}
}
/*
* This function finds and print the first fibonacci sequence number
* with 1000 digits
*/
function getFab1()
{
// fibonacci series from getFibonacci2()
foreach(getFibonacci() as $value) {
// Function breaks with the first 1000 digits
if (strlen($value) == 1000) {
break;
}
}
// prints the value
echo $value, PHP_EOL;
}
/*
* This function prints fibonacci sequence starting from
* digits 1000 $n number of times
*/
function Fibonacci($n)
{
// Initialize first and second number to 0 and 1
$num1 = 0;
$num2 = 1;
// initialize counter and set to 0
$counter = 0;
// send the flow to iterative while loo[ where we get the next number
// that starts with 1000 digits and adding the previous two number
// and simultaneously we swap the first number with the second, and second
// with third
while ((strlen($num1) >= strlen(getFab1())) && ($counter < $n)){
echo ' '.$num1;
$num3 = $num2 + $num1;
$num1 = $num2;
$num2 = $num3;
$counter = $counter + 1;
}
}
/*
* This sets and runs fibonacci sequence with index of the first term to contain 1000 digits
*/
$n = 10;
Fibonacci($n);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment