|
0 / 0 / 0
Регистрация: 13.03.2025
Сообщений: 29
|
|||||||||||
Длинный корень11.02.2026, 12:34. Показов 461. Ответов 5
Метки pascal abc.net (Все метки)
Длинный корень
(Время: 1 сек. Память: 16 Мб Сложность: 67%) По заданному натуральному числу А требуется найти наибольшее число В такое, что B2 ≤ A. Входные данные Во входном файле INPUT.TXT записано натуральное число A (A ≤ 103000). Выходные данные В выходной файл OUTPUT.TXT выведите максимальное натуральное число B, квадрат которого не превосходит A. Число B следует выводить без лидирующих нулей. все до чего я смог дойти это вот:
самое успешное решение прошло 10 тестов вот:
0
|
|||||||||||
| 11.02.2026, 12:34 | |
|
Ответы с готовыми решениями:
5
С помощью рекурсивной функции найдити квадратный корень Y=корень из X, воспользовавшись итерационной формулой Ньютона
В заданном линейном массиве найти самый длинный фрагмент, состоящий из одинаковых элементов |
|
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,419
|
||||||||||
| 11.02.2026, 17:56 | ||||||||||
Сообщение было отмечено ohio как решение
РешениеВаше равнодушие относительно создания темы: Очевидно, что это задание с проверочного сайта. На любом проверочном сайте файловый ввод-вывод не обязателен, что подтверждается Вашими программами, которые сайт принял. И Ваши эти программы... По-Вашему получается, что 103000 может поместиться в integer или double? Вы заблуждаетесь, в integer помещается целое число не более 2147483647=2.147483647*109 (значащих цифр не более 10), а в double помещается вещественное число не более 1.79769313486232*10308 (значащих цифр не более 15). На самом деле, у Вас по заданию задача на длинную арифметику, причём на самописную длинную арифметику, о чём жирно так намекает фраза "Число B следует выводить без лидирующих нулей". О чём Вы подумали, когда писали программы? Не отвечайте, не надо, это риторический вопрос. К счастью, самопальной длинной арифметики делать не придётся, поскольку тема находится здесь. В Pascal ABC.NET есть целочисленный тип BigInteger, как раз подходящий для Вашей задачи. Итак, говоря другими словами, Вам требуется вычислить целочисленный квадратный корень. Будем вычислять его, как Вы и советуете, методом Ньютона, он же метод касательных, он же метод Герона, он же вавилонский метод. Итерационная формула для целочисленного квадратного корня: Программа в идиотском коротком стиле, как Вы любите:
Программу можно несколько ускорить, если задать лучшее начальное приближение, и исключить копирование BigInteger b := t. Я считаю, что Вам и так достаточно. Если вдруг окажется, что требуется решение без BigInteger, пишите, напишу. Решение "в лоб" обсуждать не станем. Сами знаете, почему. Материалы по теме: Википедия - Целочисленный квадратный корень Википедия - Итерационная формула Герона Википедия - Методы вычисления квадратных корней Не по теме: ohio, я же Вас просил: подходите к созданию тем внимательно. А то складывается ощущение, что Вам ответ и на фиг не нужен. Кроме того, у меня теперь есть стойкая уверенность, что Вы ничего делать не пытались вообще. Ну, кроме поиска, конечно.
1
|
||||||||||
|
0 / 0 / 0
Регистрация: 13.03.2025
Сообщений: 29
|
|
| 12.02.2026, 12:13 [ТС] | |
|
спасибо, всё учту. Как более рациональное решение сделать, на дурацком acmp.ru все равно выдает runtime error хотя в паскале все окей, я вводил довольно большие значения.И да, на счет вашего примечания что я не понимаю что integer и double маленькие скажу: я знаю это, просто или не написал или как, спасибо вам за помощь.
0
|
|
|
Модератор
10434 / 5722 / 3405
Регистрация: 17.08.2012
Сообщений: 17,419
|
|||||||||||
| 12.02.2026, 18:14 | |||||||||||
|
Не знаю, что там роботу не нравится. У меня Pascal ABC.NET версия 3.8.3, у ацмп Pascal ABC.NET версия 3.11.0, у меня работает, у них - нет. Вероятно, это из-за каких-то условностей со вводом со стороны сайта. Попробуйте так:
Версия без копирования BigInteger:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 13.03.2025
Сообщений: 29
|
|
| 18.02.2026, 10:05 [ТС] | |
|
Cyborg Drone, извините но там конечно слишком большое число вводится что просто по времени не укладывается за 1 секунду сделать столько вычислений это бред, зачем вообще делать такие задачи?
Добавлено через 1 минуту а да, задача так и называется на acmp.ru длинный корень скорее всего нужно найти приближение получше ну или просто не решать мне такие сложные задачи
0
|
|
|
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
|
||
| 18.02.2026, 14:37 | ||
|
Длинный корень (Время: 1 сек. Память: 16 Мб Сложность: 67%) Для начала найдем количество цифр в ответе. Покажем, что квадрат K-значного числа имеет либо 2*K-1, либо 2*K цифр. Действительно, квадрат наименьшего K-значного числа, т.е. числа 10^(K-1), равен 10^(2K-2), т.е. имеет 2*K-1 цифру; квадрат наибольшего K-значного числа, т.е. числа 10^(K-1), равен 10^(2K)-2*10^K+1, т.е. имеет 2*K цифр. Поскольку функция y=x^2 монотонно возрастает для всех x>0 (т.е. для любых x1, x2 > 0, таких что x1 < x2 выполнено x1^2 < x2^2), квадрат любого K-значного числа будет иметь либо 2*K-1, либо 2*K цифр. Следовательно, если число A из входного файла имеет N цифр, то корень из него будет иметь ровно (N+1) div 2 цифр. Теперь, когда мы знаем количество цифр в числе, будем последовательно подбирать его цифры, начиная со старших. Пусть K старших цифр уже подобраны. Поставим на K+1 место самую большую цифру - 9, и будем уменьшать ее до тех пор, пока квадрат полученного таким образом числа (считая, что все цифры ответа, начиная с K+2 и до самой младшей равны 0) не станет меньше либо равен числу A из входного файла. Таким образом, мы подобрали K+1 цифру нашего числа. Продолжая этот процесс, получим ответ на поставленную задачу. В изложенном решении используется операция умножения "длинных" чисел. Благодаря алгоритму умножения "в столбик" эта задача сводится к многократному умножению "длинных" чисел на "короткие" и сложению "длинных" чисел. Заметим, что эта операция легко выполняется в том случае, если одно из чисел является степенью 10, умноженной на "короткое" число. Тогда достаточно умножить "длинное" число на это короткое, а затем сдвинуть результат на нужное число позиций, что равносильно умножению числа на степень 10. Пусть aK - число, полученное на K-м шаге нашего приближения, b - очередная цифра, умноженная на 10 в соответствующей степени. Тогда (aK+1)^2=(aK+b)^2=(aK)^2+2aKb+b^2. В стоящей справа сумме все слагаемые, кроме первого, представляют собой частный случай перемножения "длинных" чисел, изложенный выше. А первое слагаемое уже было вычисленно на предыдущем шаге алгоритма. Разбор задачи взят с сайта http://olympiads.ru
0
|
||
| 18.02.2026, 14:37 | |
|
Помогаю со студенческими работами здесь
6
Найти самый длинный отрезок
Длинный НОД Самый длинный целочисленный тип данных
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|