algorithm - 确定 n 是否为具有整数边的三角形的斜边

标签 algorithm math

我的算法和在可能副本中找到的算法是O(n) 并且对于要求来说太慢了。

1 <= n <= 5*10^6

最佳答案

Euclid's formula告诉我们每个毕达哥拉斯三元组 (a, b, c) 都是由整数 k, n,m 组成的,其中 m>n

a=k*(m^2-n^2)
b=2*k*m*n
c=k*(m^2+n^2)

如果 C 可以表示为整数 k 与两个不相等整数平方和的乘积,则 C 是具有整数边的直角三角形的斜边。我们可以找到 C 的主要因素,并检查至少有一个因素是 Pythagorean prime形式为 4*p+1。需要 O(Sqrt(C)) 时间

关于algorithm - 确定 n 是否为具有整数边的三角形的斜边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935283/

相关文章:

java - 用数学方法检查一个数是正数、负数还是 0

java - 与 Java 一起使用的最佳数学库是什么?

c# - 缓存条目替换算法

c++ - 在检查 array[i] == i 时返回 bool 的递归算法(必须是 O(log n))

java - 在 Java 中计算协方差矩阵

python - pow 或 ** 用于 Python 中的非常大的数字

c++ - 找到给定范围内的完美正方形的数量

c++ - Codechef 虫洞 : What's wrong with my logic?

algorithm - 定时同步

python - 关于 Python 内置的 sort() 方法