Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- * a & b is positive integers
- * f(0) = a;
- * f(1) = a + b;
- * f(n) = f(n-1) + f(n-2)
- * f(x) = 1e6, find a & b so that x get as high as posible
- *
- * g(0,a,b) = a
- * g(1,a,b) = a+b
- * g(n,a,b) = g(n-1,a,b) + g(n-2,a,b)
- *
- * g(n,0,1) => fibinatchii => g(31,0,1) > 1e6 => n < 31
- * best found; g(18,144,154) = 1e6
- * g(18,a,b) = 4181a + 2584b
- * g(19,a,b) = 6765a + 4181b, x > 18 => 4181b < 1e6 => b < 240
- */
- function fibMaker($a, $b) {
- yield $a;
- while(true) {
- yield $b += $a;
- yield $a += $b;
- }
- }
- function serie($n = 0, $max = 240) {
- while($n < $max) {
- yield $n++;
- }
- }
- function getX($a, $b, $goal = 1e6, $limit = 31) {
- $fib = fibMaker($a,$b);
- $index = 0;
- foreach($fib as $n) {
- if($n == $goal) {
- return $index;
- }
- if($n > $goal) {
- return 0;
- }
- if($index > $limit) {
- return 0;
- }
- $index++;
- }
- return 0;
- }
- $best = 1;
- foreach(serie(1) as $n1) {
- echo $n1, "\r";
- foreach(serie(0) as $n2) {
- $x = getX($n1, $n2);
- if($x >= $best) {
- echo 'g(', $x, ',', $n1, ',', $n2, ') = 1e6', PHP_EOL;
- $best = $x;
- }
- }
- }
- echo ' ', PHP_EOL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement