我正在寻找一种算法来找到两个整数值 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/