c++ - 找到两个整数,使得它们的乘积接近给定的实数

标签 c++ c algorithm integer

我正在寻找一种算法来找到两个整数值 x,y 使得它们的乘积尽可能接近给定的 double k 而它们的区别是低。

示例:矩形的面积是k=21.5,我想找到该矩形的边长,但必须是整数,在此一些可能的解决方案是(不包括排列)(x=4,y=5),(x=3,y=7) 和愚蠢的解决方案(x=21,y=1)

事实上,对于 (3,7) 对,我们与 (21,1) 对有相同的区别

21.5-3*7=0.5 = 21.5-21*1

而对于 (4,5) 夫妇 21.5-4*5=1.5

但是一对 (4,5) 更可取,因为它们的差值是 1,所以矩形“更方”。

是否有一种方法可以提取那些x,y 值,这些值的差异最小且它们与 k 的乘积差异也最小?

最佳答案

您必须查看相关数字的平方根。对于 21.5 sqrt(21.5) = 4.6368,您找到的数字实际上就在这个值附近。

关于c++ - 找到两个整数,使得它们的乘积接近给定的实数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231940/

相关文章:

c++ - 获取具有计数的 vector 的不同 vector

c++ - 创建 "relative"优先级队列的算法? (c/c++)

c++ - 获取c++11中函数的结果类型

c++ - 我应该检查什么预处理器条件才能使用 __attribute__((const))?

c - strstr() 在 gcc 和 VS 中的实现是否具有线性复杂度?

C 横坐标拟合长度算法

python - 如何在 python 包装中使用 unicode 字符串为 c++ 类使用 cython?

c++ - 如何获取另一个应用程序的所有窗口的句柄

c - 如何删除 (POSIX) C 中的目录及其内容?

algorithm - 使用贪心法,给定一个 m×n 的 bool 矩阵 B,找到其元素全为零的最大方子矩阵