逼近一个最接近某个值的公约数?

假设我们有两个数字(不一定是整数) x1x2 。 假设用户输入一个数字y 。 我想找到的数字y'接近于y因此x1 % y'x2 % y'非常小(例如小于0.02 ,但让我们称这个数字为LIMIT )。 换句话说,我不需要一个最佳算法,而是一个很好的近似值。

我感谢大家的时间和精力,这真的很友善!


让我解释我的应用程序中存在什么问题:例如,给出了屏幕大小,宽度为screenWidth ,高度为screenHeight (以像素为单位)。 我用长度为y'正方形填满屏幕。 说,用户想要的平方尺寸是y 。 如果y不是screenWidth和/或screenHeight的除数,则屏幕两侧会有未使用的空间,但不足以容纳正方形。 如果这个未使用的空间很小(例如一行像素),那就不是那么糟糕,但如果不是这样,它看起来不会很好。 我如何找到screenWidthscreenHeight


我不知道如何确保x1%y'和x2%y'都低于某个值 - 如果x1是素数,则没有任何数值会低于您的限制(如果限制低于1),除了x1(或非常接近)和1。

所以总是有效的唯一答案是微不足道的y'= 1。

如果你允许非整数除数,那么只需选择y'= 1 /(x1 * x2),因为余数总是0。

没有把公约数限制为整数,它可以是任何东西,而整个“最大公约数”概念就是窗外。


x1x2不是很大,所以一个简单的蛮力算法应该足够好。

x1x2除以y并计算结果的层次和上限。 这给出了四个数字: x1fx1cy1fy1c

选择这些数字中的一个,最接近x1/y (对于x1fx1c )或x2/yfor y1fy1c )的确切值。 例如,让它成为x1f 。 设置y' = x1/x1f 。 如果x1%y'y1%y'都不大于limit ,成功( y'是最好的近似值)。 否则,将x1f - 1添加到四个数字(或y1f - 1 ,或x1c + 1y1c + 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?

下一篇: Use tar.gz file like a folder?