小学奥数:求a➗b - x➗y = (a - x)➗(b - y)的正整数解
1305
2022.05.29
2022.05.29
发布于 未知归属地

对小学生来说有点弱智对大学生来说则刚刚好

不妨先假定a和b是定值,再求解。

a / b - x / y = (a - x) / (b - y) = (a * y - b * x) / (b * y)
(a - x) * b * y = (a * y - b * x) * (b - y)
a * y ^ 2 - 2 * b * x * y + x * b ^ 2 = 0
# 这里可以看成一个以y为未知数的一元二次方程
y = (2 * b * x ± sqrt(4 * b ^ 2 * (x ^ 2 - a * x))) / (2 * a)

于是可以写一段脚本求解。

from math import sqrt, fabs, gcd


def jdg(a, b, x, y):
    res1 = a / b - x / y
    res2 = (a - x) / (b - y)
    assert fabs(res1 - res2) < 1e-10
    if fabs(y - round(y)) < 1e-10:
        y = round(y)
        assert y % b == 0
        print(a, b, x, y, '%.5f %.5f' % (res1, res2), y // b, gcd(x, y) == 1)


if __name__ == '__main__':
    N = 20 + 1
    for a in range(1, N):
        for b in range(a + 1, N):
            if gcd(a, b) > 1:
                continue
            for x in range(a, N):
                delta = 2 * b * sqrt(x ** 2 - a * x)
                y1 = (2 * b * x + delta) / (2 * a)
                y2 = (2 * b * x - delta) / (2 * a)
                if b != y1:
                    jdg(a, b, x, y1)
                if x > a and b != y2:
                    jdg(a, b, x, y2)

# 结论:解得的所有的y都是b的倍数。比如15 19 20 38 0.26316 0.26316 False

附上自动format命令

autopep8 --in-place --aggressive --aggressive . --recursive

那个性质作为课后习题。我已经找到了一个绝妙的证明方法,但这里太窄了写不下(不会写求佬们教教QAQ)。

评论 (2)