Хм. Как это поставить. Люди, которые составляют Project Euler, обещают, что для каждой проблемы есть решение, которое длится менее одной минуты, и есть только одна проблема, которая, я думаю, может не выполнить это обещание, но это не так.
Да, вы могли бы переставлять цифры и пробовать все перестановки для всех квадратов, но это было бы очень большим пространством поиска, которое вряд ли было бы правильным для TM. В общем, когда вы видите, что ваш «взгляд» на проблему приведет к поиску, который займет слишком много времени, вам нужно искать что-то еще.
Например, предположим, вас попросили определить, какие числа будут результатом умножения двух простых чисел между 1 и 1. Вы можете вычислить каждое число от 1 до 1, но может быть быстрее взять все комбинации двух простых чисел и умножить их. Поскольку вы смотрите на комбинации, вы можете начать с двух и идти до тех пор, пока ваши результаты не станут слишком большими, затем сделать то же самое с тремя и т. Д. Для сравнения, это должно быть намного быстрее - и вам не нужно умножать все числа Вы можете взять журналы всех простых чисел, а затем просто добавить их и найти предел для каждого простого числа, давая вам список чисел, которые вы можете сложить.
Существует множество инновационных решений, но первое, о котором вы думаете, особенно то, о котором вы думаете, когда Project Euler описывает проблему, скорее всего, будет неверным.
Итак, как вы можете подойти к этой проблеме? Вероятно, слишком много перестановок для просмотра, но, может быть, вы можете что-то выяснить с помощью сопоставлений и сопоставлений сопоставлений?
(Стараясь не отдавать все это.)