python - 如何更有效地求平方和?

标签 python python-3.x function while-loop

家庭作业涉及创建一个函数来检查一个数字是否是两个平方和。我有一个函数可以工作,但这是一种非常粗暴的方法,并且较大的整数需要更长的时间才能运行它。我能做些什么来让它更有效地处理更大的数字吗?需要注意的是,该函数必须返回最大元组,因此例如给定整数 50 而不是返回 (5,5) 的函数,我会喜欢它返回 (7,1) 函数如下:

def sum_of_squares(n) : 
  i = 1 

  while i * i <= n : 
      j = 1

      while(j * j <= n) : 

          while (i * i + j * j == n) : 

              return (j,i)

          j = j + 1
      i = i + 1

最佳答案

有一种基于内存的非常优雅的方法,因此几乎是动态编程。时间复杂度为O(sqrt(n))。

from math import sqrt, ceil
def sum_square(n): 

    s = set()
    results = []
    for i in range(ceil(sqrt(n))):

        i_square = i * i
        s.add(i_square)  # remember square value 

        if (n - i_square) in s:
            results.append((i, sqrt(n - i_square)))
            #print(f"{sqrt(n - i_square)}^2 + {i}^2") 
            #return True
    #return False
    return results[-1] if results else None

n = 169
print(sum_square(n))

关于python - 如何更有效地求平方和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59337524/

相关文章:

python - 为什么 epoch 2 比 epoch 1 花费的时间多 18 倍?

python - 上采样数据和插值

Python 尝试...除了命令行

python-3.x - 在 tensorflow 中获取批处理

javascript - javascript 到 jQuery 的事件监听器

javascript - javascript 'function'/object 中的成员函数表示它不是一个函数

python - 如何在Python中使用多重处理生成大型语料库的tfdf?

Python 带变量的三引号字符串

python - 在 Tensorflow 1.9 的一个脚本中运行不同的模型

java - 如何在Java函数中转换字符串?