Решение уравнения диофатина методом грубой силы - PullRequest
0 голосов
/ 27 января 2019

Я новичок в питоне и программировании в целом.Итак, на днях я наткнулся на уравнение Эйлера, которое утверждает, что не существует a, b, c, d, все из которых являются натуральными числами, которые удовлетворяют уравнению a ^ 4 + b ^ 4 + c ^ 4 =д ^ 4.Позже доказано, что он был неправ, и были решения.

Цель: найти 3 целых числа, которые удовлетворяли бы уравнению a ^ 4 + b ^ 4 + c ^ 4 = d ^ 4, причем a, b, c, d - положительные целые числа.

Моя первоначальная реакция на это состоит в том, чтобы перебрать мой общий путь, перебрав a, b и c, и посмотреть, является ли {сумма чисел, возведенных в степень 4 и квадратный корень дважды}, целым числом или нет.Нечто похожее на if math.sqrt(math.sqrt(a**4+b**4+c**4))%1==0 Но обнаружил, что math.sqrt () не будет выводить столько десятичных разрядов <- потому что это было довольно большое число для работы.Дали Десятичным числам () попробовать и разыграть число как число с плавающей точкой, но оба, похоже, не сработали.Я также использовал abs (k-int (k)) == 0, чтобы найти десятичное место или нет, но, похоже, это тоже не работает.</p>

Поэтому я решил не использовать math.sqrt () и вместо этого попытался перебрать другую переменную и посмотреть, будет ли она равна произведению мощности 4 abc.

t = False  

Эта функция предназначена для проверки, имеет ли цель целое число в степени 4

def transform(target, starter):  
    i = starter
    check = False
    while target != i**4:
        if target > i**4:
            i+=1
        elif target < i**4:
            if check:
                return False
            else:
                i-=1
                check = True
        elif target == i**4:
            return True
    return True  

Основной драйвер

print ("Start")  
for i in range(1,1000000):
    for j in range(i,1000000):
        for k in range(j, 1000000):
            if transform(i**4+j**4+k**4,k):
                print ("Answer:", i, j, k)
                t = True
            if i % 10000 == 0 and j % 10000 == 0 and k % 10000 == 0:
                print ("Progress:",i,j,k,) 
        if t:
            break
    if t:
        break  

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

https://en.wikipedia.org/wiki/Diophantine_equation

...