我在最近的一次采访中被问到了这个问题。我能够回答,但面试官根本没有留下深刻印象,并转向下一个问题。
所以我需要找到第n个Fibonacci素数。这是我的理解:我们生成一个斐波纳契数列,然后将素数存储在数组中的那些系列中;对于第n个素数,我们迭代并返回数组中的第n个数字。这是对的吗?
function fibonacci ($number)
{
if ($number==0)
return 0;
if ($number ==1)
return 1;
if ($number>=2)
{
return fibonacci($number-1)+fibonacci($number-2);
}
}
function is_prime ($num)
{
if ($num <2)
return;
if ($num >=2)
{
$floor = floor (sqrt($num));
for ($i=2 ; $i <=$floor ; $i++)
{
if ($num % $i == 0) // number has factors
return; // so return
}
return $num;
}
}
$series = array();
for ($i=0 ; $i<24 ; $i++) // randomly used 24
{
$series[] = fibonacci($i);
}
function fibonacci_prime($s)
{
$final = array_map ("is_prime", $s);
// array_filter because we don't want to see null elements
echo '<pre>',print_r(array_filter($final)),'</pre>';
}
fibonacci_prime($series);
output
Array
(
[3] => 2
[4] => 3
[5] => 5
[7] => 13
[11] => 89
[13] => 233
[17] => 1597
[23] => 28657
)
1
我想知道是否有更好的方法来实现这一目标?