首页 > 解决方案 > 在 python 中显示 10 个第一个素数斐波那契数

问题描述

在我的大学有一个问题我们需要解决,我们需要按升序打印 10 个最小的素数斐波那契数。到目前为止,我找到了这段代码,但打印它们大约需要 2 分钟,我想知道是否有更快的方式来打印它们。

import math


def isSquare(n):
    sr = (int)(math.sqrt(n))
    return (sr * sr == n)


def printPrimeAndFib(n):
    prime = [True] * (n + 1)
    p = 2
    while (p * p <= n):
        if (prime[p] == True):
            for i in range(p * 2, n + 1, p):
                prime[i] = False
        p = p + 1
    list=[]
    for i in range(2, n + 1):
        if (prime[i] and (isSquare(5 * i * i + 4) > 0 or
                          isSquare(5 * i * i - 4) > 0)):
            list.append(i)
    print(list)


n = 500000000
printPrimeAndFib(n)

标签: pythonruntime-errorfibonacci

解决方案


带有一个斐波那契发生器和一个主滤波器。大约需要 0.002 秒。

from itertools import islice
from math import isqrt

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

def is_prime(n):
    return n > 1 and all(map(n.__mod__, range(2, isqrt(n) + 1)))

fibonacci_primes = filter(is_prime, fibonacci())
print(list(islice(fibonacci_primes, 10)))

输出:

[2, 3, 5, 13, 89, 233, 1597, 28657, 514229, 433494437]

推荐阅读