algorithm - 有效地找到一个完美的广场

标签 algorithm square-root

如何从函数f(n)=An²+Bn+C 中找到第一个完全平方数?给出了 B 和 C。 A,B,C 和 n 总是整数,A 总是 1。问题是找到 n。

示例:A=1,B=2182,C=3248

第一个完全平方的答案是 n=16,因为 sqrt(f(16))=196

我的算法递增 n 并测试平方根是否为整数。

当 B 或 C 很大时,此算法非常慢,因为需要 n 次计算才能找到答案。

是否有更快的方法来进行此计算?是否有一个简单的公式可以得出答案?

最佳答案

您正在寻找的是一般二次丢番图方程的特例的整数解1

Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0

你在哪里

ax^2 + bx + c = y^2

因此 A = a, B = 0, C = -1, D = b, E = 0, F = c 其中 a, b c 是已知整数,您正在寻找满足此等式的未知 xy。一旦你认识到这一点,这个普遍问题的解决方案就会很多。 Mathematica 可以做到这一点(使用 Reduce[eqn && Element[x|y, Integers], x, y]),您甚至可以找到一个实现 here包括 source codemethod of solution 的解释.

1:您可能将其识别为 conic section .它是,人们已经studying them for thousands of years .因此,我们对他们的了解很深,你的问题其实也很出名。对它们的研究是一个immensely deep and still active area of mathematics .

关于algorithm - 有效地找到一个完美的广场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9114874/

相关文章:

java - Codility - 计数元素类(class) : fastest algorithm swap

python - python中列表的反向数字排序

clojure - 如何在 Clojure 中正确使用 "iterate"和 "partial"?

python - Python 3 中大于 10^2000 的数字的平方根

android - 如何在 android 中包含如下图所示的平方根符号?

c++ - 数据结构中的 MST 和唯一性问题已解决 Ex?

c++ - 为什么算法在第一个条件后结束?

算法分析——我的想法正确吗?

c++ - 在 C++ 中通过迭代求平方根

安卓 : Square and square root sign