如何让完美的幂算法更加高效?

2023-12-09

我有以下代码:

def isPP(n):
  pos = [int(i) for i in range(n+1)]
  pos = pos[2:] ##to ignore the trivial n** 1 == n case
  y = []
  for i in pos:
      for it in pos:
          if i** it == n:
              y.append((i,it))
              #return list((i,it))
      #break
  if len(y) <1:
      return None
  else:
      return list(y[0])

由于我在内存中存储了太多的内容,因此它在 ~2000 之前都可以完美运行。我该怎么做才能使其有效地处理大量数据(例如 50000 或 100000)。我在找到一个案例后试图结束它,但如果数字很大,我的算法仍然太低效。

有小费吗?


一个号码n是一个完美的幂,如果存在b and e为此b^e = n。例如,216 = 6^3 = 2^3 * 3^3 是完美幂,但 72 = 2^3 * 3^2 不是。

确定一个数是否是完全幂的技巧是知道,如果该数是完全幂,则指数e必须小于 log2n, 因为如果e大于 2^e将大于n。此外,只需要测试素数es,因为如果一个数是复合指数的完美幂,那么它也将是复合分量的素因子的完美幂;例如,2^15 = 32768 = 32^3 = 8^5 是一个完美的立方根,也是一个完美的五次方根。

功能isPerfectPower如下所示测试每个小于 log2 的质数n首先使用牛顿法计算整数根,然后对结果求幂以检查它是否等于n。辅助功能primes通过埃拉托斯特尼筛法计算素数列表,iroot计算整数k通过牛顿法求 th 根,并且ilog计算以底数为底的整数对数b通过二分查找。

def primes(n): # sieve of eratosthenes
    i, p, ps, m = 0, 3, [2], n // 2
    sieve = [True] * m
    while p <= n:
        if sieve[i]:
            ps.append(p)
            for j in range((p*p-3)/2, m, p):
                sieve[j] = False
        i, p = i+1, p+2
    return ps

def iroot(k, n): # assume n > 0
    u, s, k1 = n, n+1, k-1
    while u < s:
        s = u
        u = (k1 * u + n // u ** k1) // k
    return s

def ilog(b, n): # max e where b**e <= n
    lo, blo, hi, bhi = 0, 1, 1, b
    while bhi < n:
        lo, blo, hi, bhi = hi, bhi, hi+hi, bhi*bhi
    while 1 < (hi - lo):
        mid = (lo + hi) // 2
        bmid = blo * pow(b, (mid - lo))
        if n < bmid: hi, bhi = mid, bmid
        elif bmid < n: lo, blo = mid, bmid
        else: return mid
    if bhi == n: return hi
    return lo

def isPerfectPower(n): # x if n == x ** y, or False
    for p in primes(ilog(2,n)):
        x = iroot(p, n)
        if pow(x, p) == n: return x
    return False

关于完美幂谓词的进一步讨论位于my blog.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让完美的幂算法更加高效? 的相关文章

  • url 查询中的字符 %7D 意味着什么?

    如果我使用 url 访问我的 web 应用程序 vi 5907399890173952 html 然后它就可以工作了 但是当我查看日志文件时 googlebot 会尝试访问一个类似的网址 该网址会生成异常 vi 59073998901739
  • SQLAlchemy如何为同一个表定义两个模型

    我有一个表 其中一列是具有两个值的 varchar groupA groupB 当我创建模型时 我想实现两件事 A 组模型 包含 X 数量的相关函数 B 组模型 包含 Y 数量的相关函数 两个模型的功能并不相同 尽管它们代表了same ta
  • 尝试将行附加到按对象分组中的每个组时出现奇怪的行为

    这个问题是关于一个函数在应用于两个不同的数据帧时以意想不到的方式表现的 更准确地说 是 groupby 对象 要么是我遗漏了一些明显错误的东西 要么是 pandas 中存在错误 我编写了以下函数 将一行附加到 groupby 对象中的每个组
  • Pytorch 线性层现在自动重塑输入?

    我记得过去 nn Linear只接受 2D 张量 但今天我发现nn Linear现在接受 3D 甚至任意维度的张量 X torch randn 20 20 20 20 10 linear layer nn Linear 10 5 outpu
  • Tastypie:GET 的身份验证和 POST 的匿名

    我使用 Django Tastypie 来管理我的用户集合 是否可以允许匿名用户在 API 中发布 在某个端点创建新用户时 并限制经过身份验证的用户仅获取自己的用户 而不是所有用户 感谢您的帮助 我发现最简单的事情就是对我正在使用的身份验证
  • mypy 错误,使用 Union/Optional 重载,“重载函数签名 1 和 2 与不兼容的返回类型重叠”

    那么 让我们从一个例子开始 假设我们有几种可以组合在一起的类型 假设我们正在使用 add 来实施这一点 不幸的是 由于我们无法控制的情况 一切都必须是 可为空的 因此我们被迫使用Optional到处 from typing import O
  • Keras ImageDataGenerator 验证分割未从打乱的数据集中选择

    如何将图像数据集随机拆分为训练数据集和验证数据集 更具体地说 validation splitKeras 中的论证ImageDataGenerator函数不是随机地将我的图像分割为训练和验证 而是从未洗牌的数据集中分割验证样本 当指定val
  • CloudWatch 日志流到 Lambda python

    我已在 CloudWatch 日志组中创建了一个订阅过滤器 并将其流式传输到我的 lambda 函数 但我的 lambda 函数中出现错误 Code import boto3 import binascii import json impo
  • 如何使用 BeautifulSoup 排除表中的某些行?

    我已经从表格中获得了所需的数据 但不想要各个玩家统计数据之间的缩写 Rk Pos Name 等 如何在保留所需数据的同时排除这些数据 包含缩写的行被归类为 thead 但我不知道如何使用该信息来跳过它 我知道玩家的数据都被压缩在一起 但现在
  • 从 FTP 服务器上的 ZIP 存档读取文件,无需下载到本地系统

    我在 FTP 服务器上的目标文件是 ZIP 文件 CSV 位于更远的两个文件夹中 我如何才能使用 BytesIO 让 pandas 读取 csv 而无需下载它 这是我到目前为止所拥有的 ftp FTP FTP SERVER ftp logi
  • 检查一个字符串是否是另一个字符串的旋转而不连接

    有 2 个字符串 我们如何检查其中一个是否是另一个的旋转版本 For Example hello lohel 一种简单的解决方案是concatenating第一个字符串与其自身并检查另一个字符串是否是substring的串联版本 还有其他解
  • 缓存 pandas 数据框的最佳方法?

    昨天 我经历了惨痛的教训 将 pandas 数据帧保存到 csv 以供以后使用是一个坏主意 我有一个包含 130k 条推文的数据框 其中数据框的一行是list的推文 当我将数据保存到 CSV 然后重新加载数据帧时 数据帧的行现在是字符串类型
  • python 使用曲面图和第四个变量的滑块可视化 4d 数据

    如何使用前 3 个变量和第四个变量的 3 维曲面图作为滑块来可视化 4 维数据 从 csv 文件加载 集 我写了一个非常小的示例 重点介绍了实现此目标的方法 import numpy as np import matplotlib pypl
  • 在 SQLAlchemy 中删除父级后删除子级

    我的问题如下 我有两个型号Entry and Tag通过 SQLAlchemy 中的多对多关系链接 现在我想删除所有Tag没有任何对应的Entry后Entry被删除 示例来说明我想要的内容 Entry 1带标签python java Ent
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • 使用 Cython 扩展模块分发共享库和一些 C 代码

    我正在尝试从大型 C 共享库 libbig so 中获取一些函数 并通过 Cython 将它们公开给 Python 为此 我有一个小 C 文件 small cpp 它为我需要的共享库的功能提供了一个薄包装器 从而可以轻松地通过 Cython
  • 相比之下,超出了最大递归深度

    我写了这段代码来计算组合的数量 def fact n return 1 if n 1 else n fact n 1 def combinations n k return fact n fact n k fact k while True
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • 如何在 Ansible 中更新嵌套变量

    我有一些额外的信息 例如数据库连接详细信息等 存储在 etc ansible facts d environment fact 中 这些可以作为变量使用 例如ansible local environment database name 更
  • shutdown.copystat() 在 Azure 上的 Docker 内部失败

    失败的代码在基于以下内容的 Docker 容器内运行python 3 6 stretch德班 当 Django 将文件从一个 Docker 卷移动到另一个 Docker 卷时 就会发生这种情况 当我在 MacOS 10 上测试时 它工作正常

随机推荐