python - 在 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)
解决方案
带有一个斐波那契发生器和一个主滤波器。大约需要 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]
推荐阅读
- android - 如何创建半透明的圆形工具栏/操作栏项目?
- html - 从批处理创建一个 html 文件
- html - WordPress - www.####.com/?p=id
- swift - 何时在 ViewController 上使用 View
- c++ - 如何在 C++ 中继承模板并访问其参数
- mailgun - 使用 mailgun 或其他邮件服务发送大量 PEC(认证电子邮件)
- ansible - 如何在ansible中使用无密码sudo用户
- reactjs - 如何将 Laravel 项目转换为 laravel api?
- excel - 使用舍入值作为 VLOOKUP 的输入导致 #N/A 返回
- jquery - 始终将徽标/标题保持在页面顶部