python - 我的素数程序中的指数抛出内存错误,我该如何解决?

标签 python python-3.x memory out-of-memory exponent

if (2 ** (tester - 1)) % tester == 1:  # Fermat's little theorem      #
    if prime_line.count(tester) == 0:                                 #
        prime_line.append(tester)

我正在使用一个程序,该程序接受任意值或字符串或其组合的多行输入,并返回该集合中任何存在的素数。我正在使用费马定理来测试数字是否为素数,以最大程度地减少处理时间。在上述代码中,诸如 194394788347 之类的数字已被去除其字母(起始输入为 1943jds9478cxbfhjvbfd8347),因此在进行指数计算时会产生内存错误。有什么办法可以解决这个问题吗?

最佳答案

2 ** 194394788347 是一个天文数字,光是存储就需要超过 22 GB。幸运的是,python 包含一个函数,可以在执行模数时取幂:pow(base, exp, mod) .

if pow(2, tester - 1, tester) == 1:

这也快得多,因为没有一个中间数比模数大很多。

关于python - 我的素数程序中的指数抛出内存错误,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59060318/

相关文章:

python - 如果 "null=True",存储在 DB 中,是 "NULL"还是 "empty values"?

python-3.x - python 列表中的冲突案例

memory - Kubernetes Pod 内存使用情况分割

python - 将 feedparser 与 Google App Engine 结合使用

python - 为什么 line != "\n"或 line != "\r\n"或 line ! ="\r"无法过滤空行?

python - 在 iPython 中打印值

python - 从字典中的迭代中删除 "None"

c - 哪些对齐问题限制了 malloc 创建的内存块的使用?

java - 在达到 Max 之前 PermGen 空间不足

python - 如何使用 boost::python 通过引用 Python 传递非常量 std::vector<double>?