首页 > 解决方案 > 我应该在 Python 中腌制素数以产生素数吗?

问题描述

我在 Python 中生成了一个算法来筛选前 n 个素数,然后列出索引 n 和第 n 个素数 p_n# 的有序对。

接下来,我基于 n 和 p_n# 评估一个函数,最后是目标,以确定函数 f(n,p_n#) 是否是单调的,因此该算法评估序列从上升到下降的位置,反之亦然。此处列出了代码的价值。

这当然是内存密集型的,我的电脑最多只能处理 2,000,000 左右的数字。

在任何给定点上,我真正需要的只是 f(n-1)、有序对 n、p_n#、素数 p_n(以便快速找到下一个素数)和一个布尔值,指示序列最近是上升还是下降.

在保持速度的同时避免在内存中存储十万或更多的素数和素数的最佳方法是什么?

我认为第一步是做一个筛子,找到一个高于某个给定素数的下一个素数,而不是找到低于某个最大值的每个素数。然后我可以评估函数的下一个值。

但我也想知道一次筛选一批说 100 个素数是否会更好。这可以通过一些有序三元组 [n,p_n,p_n#] 的“永久列表”来支持,该列表仅包含我在运行前生成的 n=100,200,300,...。搜索时,我发现了“腌制”列表的概念,想知道这是否是使用它的正确场景,还是有更好的方法?

标签: pythonpickleprimes

解决方案


推荐阅读