1 / 1 / 1
Регистрация: 05.09.2010
Сообщений: 32
|
||||||
1 | ||||||
Как работать с большими массивами больших чисел18.03.2011, 15:16. Показов 3841. Ответов 10
Метки нет Все метки)
(
Есть задача http://www.spoj.pl/problems/LUCKYN/
Я не придумал ничего лучше, как создание List<BigInteger> состоящий только из чисел с "4" и "7", а потом выводить требуемый элемент. Всё прекрасно работает на сравнительно небольших числах (десятки миллионов), но задача требует n <= 1000,000,000 И тут начинаются проблемы. Вот код метода, который вычисляет числа:
Подскажите плиз что сделать. Или может у меня в корне неправильное представление решения, и надо продумать закономерность для мгновенного вывода нужного числа, без пересчёта предыдущих? (Мозгов не хватает) Спасибо.
0
|
|
18.03.2011, 15:16 | |
Ответы с готовыми решениями:
10
Как правильно работать с большими массивами? Как оптимизировать работу с большими массивами изображений Как работать с большими XML Как работать с большими числами |
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
|
|
18.03.2011, 15:34 | 2 |
Лучше работать просто со строками
0
|
Заблокирован
|
||||||
18.03.2011, 15:40 | 3 | |||||
0
|
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
|
|
18.03.2011, 15:42 | 4 |
цикл n от 1 до 100000000
например - текущая длина строки n=5: формируем строку из одних 4 44444 затем начиная с конца строки заменяем 4 на 7, сдвигая при этом влево 44447 44474 44477 44744 44747 44777 и т.д. И так для всех длин строки З.Ы,: сори, туплю, луна влияет ) Проглядел насчет вывода именно по порядковому номеру в последовательности
0
|
1 / 1 / 1
Регистрация: 05.09.2010
Сообщений: 32
|
||||||
18.03.2011, 15:46 [ТС] | 5 | |||||
Пробовал, очень долго думает,и всё равно появляется ошибка, а на сайте с заданием эта программа выполняется за 8с.
0
|
1 / 1 / 1
Регистрация: 05.09.2010
Сообщений: 32
|
|
18.03.2011, 16:00 [ТС] | 7 |
Писать(записывать) в файл, пробовал, txt-файл занимает 87Мб. Ограничение на программу 50Кб.(Но пока с памятью не заморачиваюсь), хотя-бы время сократить и реализовать возможность вывода миллиардного элемента.
Добавлено через 3 минуты Он то как-бы подходит, но мне надо иметь возможность получить 1000000000 -й эелемент по счёту, а он имеет по моим подсчётам 29 или 30 знаков
0
|
194 / 193 / 17
Регистрация: 07.11.2010
Сообщений: 477
|
|
18.03.2011, 16:25 | 8 |
Сейчас что-то тяжело соображается. Но мысли еще шевелятся )
В данном случае можно заметить, что количество вариантов из 4 и 7 для числа из m разрядов составляет 2^m вариантов. Т.е. присутствует геометрическая прогрессия. Т.о., если воспользоваться формулой суммы геометрической прогрессии, то можно по заданному n определить сколько разрядов должно содержать искомое число 4444444447474747474. Потом уже зная количество разрядов числа, нужно найти зависимость как быстро получить нужную комбинацию 4 и 7. Щас не соображу ( Добавлено через 13 минут Определяется необходимое число разрядов для числа. Затем из этого числа разрядов формируется число 4444444444444, определяется его позиция в последовательности. Затем находится разница P между его позицией и n. Потом рекурсивно работаем с P.
0
|
Заблокирован
|
||||||||||||||||
19.03.2011, 01:40 | 9 | |||||||||||||||
небольшая ошибочка надо так
Не внимательно прочитал. Вот с большими числами и время выполнения - 5 сек.
1
|
Заблокирован
|
||||||
21.03.2011, 08:34 | 10 | |||||
протестируйте
1
|
1 / 1 / 1
Регистрация: 05.09.2010
Сообщений: 32
|
|
21.03.2011, 12:47 [ТС] | 11 |
Спасибо.
Dzhej-Dzhej, всё коллосально. Всем другим тоже большое спасибо.
0
|
21.03.2011, 12:47 | |
Помогаю со студенческими работами здесь
11
Как работать с большими числами? Как работать с большими словарями Как работать с большими текстами? Как работать с очень большими числами? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |