Во все времена были люди, которые увлекались математикой. Для небольшой части математика являлась средством к существованию, для оставшегося большинства - зарядкой для ума, формой досуга. Если мы вспомним относительно недавнее прошлое, а именно докомпьютерную эру, то увидим, что на протяжении веков математические игры разума обходились только бумагой и карандашом. При этом, рассматриваемые задачи не требовали сложных, многостраничных расчетов. Разумеется, такие вычисления производились, но этим занимались профессионалы. После того, как вычислительные мощности значительно подешевели, ситуация изменилась. Класс задач, который требовал многократных вычислений или перебора огромного количества вариантов, стал доступен массовому пользователю и среди них оказались те, кому это было интересно. Так, в частности, возник Проект Эйлер (здесь можно найти его русскую версию). Проект - это набор задач, которые можно решить,как правило, только с применением вычислительной техники. При этом, метод прямого перебора требует такого количества времени, что делает его использование бессмысленным. Поэтому участникам необходимо знание разнообразных методов и алгоритмов, которые относятся к соответствующему разделу математики. Как показывает практика, большинство задач требует применения длинной математики, поскольку результаты расчетов выходят за ограничения, которые присутствуют в вычислительных системах с побайтным хранением целых чисел. Если обратиться к статистике того какие языки программирования используют участники проекта, то обнаружится, что на первом месте по количеству пользователей идет Python, совсем немного отстает C/C++, на третьей позиции находится Java. 1С в этом списке не значится. Между тем платформа позволяет эффективно решать самые разнообразные задачи, которые представлены на сайте проекта. Во первых, в 1С уже реализована длинная математика для операций сложения и умножения. Поэтому, например, задача 20, в которой надо найти сумму цифр в числе 100! решается элементарно. Впрочем, ограничения на длину чисел в 1С есть. Запустите у себя на машине следующий код и посмотрите что получится.
н=10;разрядов=2; пока ИСТИНА цикл разрядов=разрядов+1; н=н*10; если СтрДлина(Формат(н,"ЧГ=0"))<>разрядов тогда сообщить("Предел "+разрядов); прервать; конецесли; конеццикла;
Смею полагать, что данной точности достаточно для большинства задач, которые предлагаются к решению (но ,например, для Задачи 25 этой точности, увы, не достаточно). Во вторых, скорость исполнения при выборе правильного метода, позволяет во многих случаях уложиться в одну минуту. О том насколько важен выбор алгоритма говорит пример 66 задачи. В ней предлагается найти такой коэффициент D<=1000 для квадратного Диофантового уравнения, чтобы соответствующее ему решение х было максимальным. Максимальное решение в этом случае будет 16 421 658 242 965 910 275 055 840 472 270 471 049. Разумеется, никаким перебором до этого значения не дойти.
Поделюсь несколькими наблюдениями. Если говорить об объектах языка, то как показал мой опыт, самым используемым оказался массив и один раз я обращался к Таблице значений. Когда участник проекта успешно решил задачу, то он может оставить к ней комментарий, в частности разместить свой вариант решения. Задача № 9 относится к простым, что подтверждает количество решивших (168213). Заглянув в комментарии, я обнаружил одно решение на ассемблере, решения в которых просто перебирались все числа из диапазона от 1 до 1000, и одно решение без программирования. Это был участник из Италии, он использовал представление для троек Пифагора и его решение уложилось в 8 строк. Молодец !
Проект Эйлер существует уже 13 лет. За это время список задач вырос до 476. Надеюсь, что когда-нибудь они все будут решены на платформе 1С:Предприятие.