【问题标题】:Formula to find square root of a natural number using only addition and subtraction [closed]仅使用加法和减法求自然数平方根的公式[关闭]
【发布时间】:2018-04-07 22:59:43
【问题描述】:

如何只用加减法求自然数的平方根?
谢谢。
[我浏览了互联网,但没有找到与此问题相关的任何内容。]
我的问题的解释:我想创建一个只接收自然数和返回它的平方根。
你可能会说使用“sqrt”函数,但我只是想创建一个使用加法和减法运算符来创建平方根的函数。
您不必编写程序,只需为其编写公式即可。谢谢。

更新:这个问题不是专门关于编码,而是关于数学。(我标记了“c”,因为它有一些链接,但这个问题不是关于编码的。)

【问题讨论】:

  • 我们可以使用乘法和除法吗?
  • 最好不要用。但是,我很乐意看到带有乘法和除法的公式。 @Mitchel0022
  • 您希望结果是 int 还是 double?
  • @DavidRTribble 请查看更新。谢谢。
  • 我投票结束这个问题,因为这个问题不是专门关于编码而是关于数学的。

标签: math square-root


【解决方案1】:

n2 等价于 n 个第一个奇数之和。

您可以迭代 n(因此只将下一个奇数添加到先前计算的总和中)直到平方等于或超过您的数字。

k = 0
sum = 0
while sum < target:
    k += 1
    sum += 2k-1
if sum > target:
    the target doesn't have integer root
else:
    k is the square root

【讨论】:

  • 他想要平方根,而不是平方。
  • @zch:这就是为什么我不应该在晚上发帖。我以不同的方式重复使用了我的答案。
  • @GaousMuhammadSaklaen:通常平方根是使用迭代方法计算的,从原始的矩形平方方法到更有趣的方法。我认为不存在不涉及迭代的公式。
  • 不是更适合math.stackexchange.com吗?他们可能会提供它不存在的证据或这样做的方法。
  • @GaousMuhammadSaklaen 人们对你投了反对票,因为这个问题与 Stack Overflow 无关,在这里我们主要讨论代码而不是数学(除非数学是编码问题的重要组成部分)。
【解决方案2】:

我们可以使用(n+1)² = n² + 2n + 1这个事实。

def sqrt(n):
    k = 0
    s = 0
    while s <= n:
        s = s+k+k+1
        k = k+1
    return k-1

print (sqrt(0))     # 0^2
print (sqrt(1))     # 1^2
print (sqrt(2))     # (1.4142135623730951...)^2
print (sqrt(144))   # 12^2
print (sqrt(169))   # 13^2
print (sqrt(196))   # 14^2
print (sqrt(255))   # 15^2
print (sqrt(1000))  # (31.622776601683793...)^2
print (sqrt(2000))  # (44.721359549995796...)^2

UPD
抱歉,我以为你要的是代码 :)

【讨论】:

  • 没关系。我不需要代码。我只需要一个公式来求平方根。
  • @GaousMuhammadSaklaen 我认为这可能很复杂。 en.wikipedia.org/wiki/Methods_of_computing_square_roots 这里有一些方法,但它们大多类似于算法。除了一些粗略的近似值。
  • 感谢您评论此链接。但是,正如你所理解的,这不是我问的问题。 :| @lcastillov。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2012-11-14
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
相关资源
最近更新 更多