Очень эффективная структура данных
Вообще да, там все очень даже эффективно, просто алекс выдрал из контекста то, что требует подробного объяснения или не дочитал - там base 30 хранится: https://www.codementor.io/@arpitbhayani/how-python-implements-super-long-integers-12icwon5vk
Большинство школьников сделают аналогичное гораздо медленнее. Но скорее всего они просто используют BigInteger, точно также совершенно не разбираясь как это работает. Ну и в чем разница?
Реализуйте лучше на pascalabc.net без BigInteger, посмотрим насколько медленнее оно будет работать
Да уж предложите сразу реализовать PascalАВС.NЕТ без .NET - чего мелочиться? А Python надо реализовать без всех этих его библиотек. В DOSBox. И будет Вам счастье…
Так в Free Pascal его изкоробки нет, почему как раз его и советую. Придётся им или искать в инете или самим писать,что будет гораздо полезнее.
Конечно может оно медленнее будет работать, но это не значит, что это плохо. Обычно в таких задачах производительность вообще не критична.
В том что придётся понять, что ничего не даётся даром, и те же big int компьютер обрабатывает через множество манипуляций с числами обычной разрядности. Что будет замаскировано при обучении на языках вроде ABC или Python. Из чего следует, что для начального обучения программированию они подходят хуже, чем Free Pascal.
C тоже не очень хорошо подходит для начального обучения, но уже по другой причине — он наоборот уже слишком близок к железу, из-за чего более высокоуровневые концепции в нём отсутствуют, даже такие элементарные как массивы и строки. Поэтому и получается что кроме Pascal для самого начального обучения и взять-то нечего, каким бы он ни казался устаревшим и непопулярным.
Из этого следует совсем другое: если Вы со своими идеями пойдете в школу учить детей, то очень быстро станете героем тик-тока с отпечатком ботинка на пятой точке.
Это не требуется для обучения. Этот критерий “близок/не близок к железу” вы сами придумали для себя. Важно уметь строить алгоритм решения задачи. Как там компьютер BinInt или float в у себя хранит и обрабатывает по большей части не важно для начала. А вот то, что writeln(3/2); после fpc выводит 1.5000000000000000E+000 - вызывает некоторые вопросы… Кстати у pabc с этим получше вроде.
А вы свои критерии не сами придумали? Почему вы решили, что это не важно, а то важно?
А что он, по-вашему, должен выводить? Это в Си целочисленное деление обозначается простым /
, а в паскале нужно явно написать mod или div, чтобы целый результат получить (3 div 2 должно дать 1)
1.5 внезапно
Так он 1.5 и выводит в экспоненциальной нотации. Если не нравится, то во writeln можно формат задать:
writeln(3/2:1:1)
Если надо вывести 0.3/1.75/1.825 и т.д, то не поможет, надо принудительно форматировать через FormatFloat в general или что-то аналогичное. Это конечно все равно придется познать, но в начале обучения это лишняя магия.
Bigint без понимания это плохо, хотя его использование не может привести к каким-то ошибкам. Но падаван должен обязательно понимать как оно работает!!
Float без понимания это нормально, хотя как раз в нем есть подводные камни, но чтото я сомневаюсь что ктото дает типы переменных и сразу детали того как они храняться и считаются.
Ну т.е. Вы критикуете язык, толком его не зная. Прелестно…
Если вдаваться в детали, надо определиться что есть язык pascal для начала… Конкретно FormatFloat из sysutils fpc. У абц форматирует по умолчанию, даже не интересовался дальше.
Ну и чтобы что-то толком знать, надо этим пользоваться. Зачем в 2022 знать паскаль я хз…
Я, вообще-то, такого не говорил. Но типы с плавающей точкой нативно поддерживается процессорами x86 начиная с i486, так что без него в языке программирования никуда не деться. Но вообще-то понять как эти типы данных в памяти закодированы и как работают куда проще чем bigInt из какой-то библиотеки по которой не факт что такая дока вообще есть.
Кстати, в тему предыдущего обсуждения. Нашел и посмотрел видео решения одного из вариантов ЕГЭ по информатике. Там где автор решал брутфорсом на питоне, я решал ту же задачу в уме и причём правильно и быстрее чем автор писал код. И это не потому что я такой умный, а потому что эти задачи вручную решить действительно проще. Единственный номер, где я бы наверное тоже обратился к брутфорсу, это с таблицей истинности, да и то, только потому, что не помню правил алгебраических преобразований. Ну и конечно есть номер, где явно нужно программирование по условиям, но там на fpc решение выйдет немногим длиннее чем на питоне. (а если не считать begin/end то вообще так же)
А давайте вот такую задачку. На интервале от 45 000 000 до 50 000 000 найти количество чисел, имеющих ровно 28 четных делителей. Тривиальные делители также учитываются, количество нечетных делителей неважно.
В уме будете решать или на fpc? Хотелось бы код увидеть…
У кого? У программиста???
Есть простой пример задачки на наличие мозга. Найти корень из суммы n нечетных чисел. И дать n чтобы сумма в переполнение ушла. Можно замаскировать дополнительно… решается на бумажке
И что? Сумму искать не как integer
, а как real
. Вряд ли сумма уйдет за пределы 10^308. Детский сад… А кто помнит математику, знает, что ответом будет n.
А не надо даже помнить математику, чтобы понять что это n. Суть в том, что если решатель сразу начал писать цикл, то с думалкой проблема. Ну и обычно задача чуть более запутана и еще лимит на время выполнения программы стоит. Это же для падаванов.
А посложнее есть project euler.