【问题标题】:random-acess machine (RAM) - Test square-free n随机存取机 (RAM) - 无测试平方 n
【发布时间】:2018-07-09 15:43:16
【问题描述】:

我正在编写一个随机存取机器 (RAM),使用一个模拟器来测试给定的自然数是否是无平方的。我的目标是分析它的复杂性。

在高层我会使用下面的测试函数

def isSquareFree(n):

    if n % 2 == 0:
        n = n / 2

    if n % 2 == 0:
        return False

    for i in range(3, int(sqrt(n) + 1)):
        if n % i == 0:
            n = n / i

        if n % i == 0:
            return False

return True

我的问题是,我不确定如何使用 RAM 命令计算 n 的平方根,并且在网上找不到太多资源。所以我正在重新考虑这是否真的是正确的做法。

有哪些替代方法可以测试一个自然数是否是无平方的,可以使用 RAM 来实现?

谢谢。

【问题讨论】:

  • 正如目前所写,这个任务非常广泛。我建议您将此问题限制在您问题的特定部分。例如,“如何在 RAM 上计算平方根?”或“有哪些替代方法可以免费测试平方?”。此外,对场外资源的请求明显偏离主题,可能会导致您的问题被忽略或关闭
  • 谢谢。现已编辑。

标签: complexity-theory


【解决方案1】:

如果您只是想避免代码中出现sqrt,您可以简单地测试i*i<=n。无论如何,这可能是个好主意,因为计算平方根是一件相当困难的事情。

因此,我会将您的代码更改为:

def isSquareFree(n):
    i=2   
    while i*i <= n:
        if n % i == 0:
            n = n / i

        if n % i == 0:
            return False
        
        i = i+1

    return True

上面只使用了相当原子的操作,所以我希望这会对你有所帮助。但我不熟悉 RAM 编程,所以我不确定这是否能解决您的问题。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多