逼近一个最接近某个值的公约数?
假设我们有两个数字(不一定是整数) x1
和x2
。 假设用户输入一个数字y
。 我想找到的数字y'
接近于y
因此x1 % y'
和x2 % y'
非常小(例如小于0.02
,但让我们称这个数字为LIMIT
)。 换句话说,我不需要一个最佳算法,而是一个很好的近似值。
我感谢大家的时间和精力,这真的很友善!
让我解释我的应用程序中存在什么问题:例如,给出了屏幕大小,宽度为screenWidth
,高度为screenHeight
(以像素为单位)。 我用长度为y'
正方形填满屏幕。 说,用户想要的平方尺寸是y
。 如果y
不是screenWidth
和/或screenHeight
的除数,则屏幕两侧会有未使用的空间,但不足以容纳正方形。 如果这个未使用的空间很小(例如一行像素),那就不是那么糟糕,但如果不是这样,它看起来不会很好。 我如何找到screenWidth
和screenHeight
?
我不知道如何确保x1%y'和x2%y'都低于某个值 - 如果x1是素数,则没有任何数值会低于您的限制(如果限制低于1),除了x1(或非常接近)和1。
所以总是有效的唯一答案是微不足道的y'= 1。
如果你允许非整数除数,那么只需选择y'= 1 /(x1 * x2),因为余数总是0。
没有把公约数限制为整数,它可以是任何东西,而整个“最大公约数”概念就是窗外。
x1
和x2
不是很大,所以一个简单的蛮力算法应该足够好。
将x1
和x2
除以y
并计算结果的层次和上限。 这给出了四个数字: x1f
, x1c
, y1f
, y1c
。
选择这些数字中的一个,最接近x1/y
(对于x1f
, x1c
)或x2/y
( for y1f
, y1c
)的确切值。 例如,让它成为x1f
。 设置y' = x1/x1f
。 如果x1%y'
和y1%y'
都不大于limit
,成功( y'
是最好的近似值)。 否则,将x1f - 1
添加到四个数字(或y1f - 1
,或x1c + 1
或y1c + 1
)的y1c + 1
,选择另一个最接近的数字并重复。
您想要在固定区域内适合最大数量的均匀间隔的方块。 用一些简单的数学可以找到解决问题的最佳解决方案。
假设你有一个宽度= W和高度= H的区域,并且你试图用长度= x的边来拟合正方形。 我将称max_hor和max_vert分别为max_hor = floor(W / x)和max_vert = floor(H / x)的最大平方和垂直平方数。 如果你并排绘制所有的方块,没有任何间隔,每一行和每一列都会有一个休息。 让我们分别通过rest_w和rest_h来调用水平/垂直休息。 下图说明了这种情况:
请注意,rest_w = W-max_horx和rest_h = H-max_vertx。
你想要的是将rest_w和rest_h equal分开,生成尺寸为space_w和space_h的小水平和垂直空间,如下图所示:
请注意,space_w = rest_w /(max_hor + 1)和space_h = rest_h /(max_vert + 1)。
这是你要找的号码吗?
链接地址: http://www.djcxy.com/p/10457.html上一篇: Approximation of a common divisor closest to some value?