Решение диофантова уравнения и подстановка через ряд. В общем виде

# Big O(m^n), m ряд, n число
# Реализация двух рядов - 2^n (x, y) для sha, aes 256/512
#  В проекте реализация 45 рядов (осей) в линейном виде

#  if a1*e1 + ... + an*en = bn, b -> [0:1000] (sum(an*en) = bn
#  then return all a and e кроме одного
#  Последний е остается и выводится для случая в 2 оси = c-ax/b,
#  if (c-ax) % b == 0, return 'Z integer equation' else: return 'Q,R'


def eq(a, e, b): # По типу Базиса Шаудера

    for n in range(1, 10 + 1): # число рядов
        if a[n] * e[n] == b: # a1*e1 + a2*e2 + ... + an*en = b, b > 0
            return a, n, e, b


if __name__ == '__main__':
    res = eq()

    print(res)

##################

    while n <= 10:
        if (a[n] * e[n]) + (a[n-1] * e[n-1]) == b:
            print(a, n, e, b)

Как решать это уравнение в целых и рациональных, если ответ - при условии, если 1 из рядов имеет решение. Берча Св Дайера ответ.

Единственное хочу на питоне реализацию вопроса про уравнение с ограниченным числом переменных.


Ответы (1 шт):

Автор решения: CrazyElf

У вас в комментарии сумма ряда сравнивается с b, а в коде вы всего одно слагаемое сравниваете с b. Вы уж разберитесь, чего вы точно хотите. Для того, чтобы посчитать сумму ряда, нужно добавлять его слагаемые в какую-то переменную. А сравнение с b производить уже после того, как окончится цикл и посчитается весь ряд. И ещё индексация в питоне начинается с 0, а не с 1.

    s = 0
    for n in range(10): # число членов ряда
        s += a[n] * e[n] 
    return s == b

Но это ещё не всё. Нужно помнить, что у вас вычисления приблизительные и точность чисел с плавающей точкой ограничена. Поэтому сравнение нужно производить не точно, а с каким-то допущением.

epsilon = 1e-5
...
        return abs(s-b) < epsilon
→ Ссылка