|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
||||||
Сложение чисел до определенного разряда29.06.2018, 14:21. Показов 2116. Ответов 9
Метки нет (Все метки)
Я рассчитываю числа Фибоначчи и нужны только первые 9 цифр от каждого числа, то есть все что после 9 цифры числа я не рассчитываю.
Вот мой полурабочий код
Я пробовал увеличить количество нулей в MaxDigit и потом из 329468 числа брать только первые 9 путем деления на 10^(количество добавленных нулей). В таком случае переполнение не успевает добраться до 9 цифры, но это костыльное решение...
0
|
||||||
| 29.06.2018, 14:21 | |
|
Ответы с готовыми решениями:
9
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
| 29.06.2018, 14:29 | |
|
Простите, а что в Вашем понимании числа Фибоначчи? Примерно 41 число в его последовательности имеет более (или =) 9 цифр. Поясните на конкретных примерах, что Вы делаете.
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 29.06.2018, 14:40 [ТС] | |
|
Числа Фибоначчи это когда каждое следующие число это сумма двух предыдущих. Я начинаю с чисел 1 и 1 как и многие то есть 1 1 2 3 5 8 13 21 ...
Я беру только первые 9 цифр этого числа. Например, когда последовательность доходит до 44 числа в перегрузке оператора происходит вот что 44 701408733 <-- f1 45 113490317(0) <-- f2 if f2 > maxdigit then f1 /= 10; f2 /= 10; f3 = f1 + f2; end if; 46 183631190(3) Под 45 числом я написал псевдокод, мы делим оба слагаемых на 10 если их сумма больше миллиарда и только потом складываем их иначе просто складываем. В скобках отсекаемое число. В этом примере все так как оно должно быть, но на деле числа получаются немного меньше.
0
|
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
||||||
| 29.06.2018, 14:54 | ||||||
|
Не могу вспомнить автора, но где-то на просторах форума находится. Изменить лишь вывод от .. до
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 29.06.2018, 16:12 [ТС] | |
|
Да библиотеки больших чисел у меня тоже есть. В коде котором я написал выше это упрощенная версия больших чисел, которая в каждой ячейке(элемент массива типа вектор) хранит только число не более чем из 9 цифр и умеет только складывать(для Фибоначчи больше не нужно). Полноценная библиотека будет обсчитывать число целиком, и на языке Perl у меня ушло 10 минут на это. На с++ мое решение работало дольше, и я не стал ждать результата и решил обсчитать только нужные мне 9 чисел.
Добавлено через 57 минут Что-то я теряю при делении на 10 и не знаю как это использовать, компенсировать.
0
|
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
| 29.06.2018, 21:26 | |
|
У тебя на 43 числе (70140873 701408733)
Почему-то теряется в "первых 9 цифрах" крайняя 3ка. Хотя цифр всего 9 там, а не больше, а в "последние 9" записывается нормально. Ну а дальше уже от этого начинает плясать всё
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
||||||
| 29.06.2018, 21:48 [ТС] | ||||||
|
Теряется при делении на 10. Я работаю над новым кодом. Идея в том чтобы добавить еще одну ячейку еще для 9 цифр, и того 2 ячейки для первых уже 18 чисел. Я понимаю что они будут плясать пока я не пойму почему а в этом случае пляска по идее не достанет первую ячейку еще очень долго.
Ну а вообще уже не стало для меня секретом что я решаю 104 задачу проекта Эйлера) Я нашел решение на с++ но я не смог вникнуть в суть его работы, особенно как-он складывает и решил переписать эту часть сам, но моих мозгов недостаточно... Прилагаю готовый код. Кликните здесь для просмотра всего текста
// //////////////////////////////////////////////////////// // # Title // Pandigital Fibonacci ends // // # URL // https://projecteuler.net/problem=104 // http://euler.stephan-brumme.com/104/ // // # Problem // The Fibonacci sequence is defined by the recurrence relation: // // `F_n = F_{n-1} + F_{n-2}`, where `F_1 = 1` and `F_2 = 1`. // // It turns out that `F_541`, which contains 113 digits, is the first Fibonacci number for which the last nine digits are 1-9 pandigital (contain all the digits 1 to 9, but not necessarily in order). // And `F_2749`, which contains 575 digits, is the first Fibonacci number for which the first nine digits are 1-9 pandigital. // // Given that `F_k` is the first Fibonacci number for which the first nine digits AND the last nine digits are 1-9 pandigital, find `k`. // // # Solved by // Stephan Brumme // May 2017 // // # Algorithm // My solution is based on a stripped down version of my ''BigNum'' class and stores 9 digits per cell, that's why it's called ''BillionNum'' (because ''MaxDigit = 1000000000'' ==> `10^9`). // It only supports ''operator+=''. // // ''isPandigital(x, digits)'' returns true if ''x'' is ''1..digits''-pandigital, e.g. ''isPandigital(312, 3) == true'' because 312 is 3-pandigital. // The original problem assumes ''digits = 9''. // ''x'' 's digits are chopped off step-by-step and a bitmask tracks which digits we have already seen. // Zero is not part of any pandigital number, not even implicit leading zeros. // // The ''main'' routines analyzes the lower digits first. // Only when they are pandigital then the highest digits are checked, too, because that's bit slower: // I take all digits from the highest cell of my ''BillionNum''. If there are too few digits, all digits in its neighboring cell are included. // We might have too many digits now, therefore I remove the lowest digit until the number of digits is correct. // If these digits are pandigital, then we are done. // // Finding the next Fibonacci number involves ''operator+='' of ''BillionNum''. The default algorithm is: // `F_{next} = F_a + F_b` // `F_a = F_b` // `F_b = F_{next}` // ==> quite a few memory allocations, and many object constructor/destruction will take place behind the curtain. // A simple trick to improve performance is to use these equations instead, which get rid of these "memory/object bookkeeping" effects: // `F_a += F_b` (add in-place) // `F_a <=> F_b` (swap contents of both object, which is technically just swapping two pointers) // // The main performance boost comes from my next trick: // - we check the lowest digit whether they are pandigital // - we check the highest digit whether they are pandigital // - __but we don't care what the other digits are__ // ==> whenever a number exceeds a certain size, I delete digits from the middle // Currently I delete if there are more than 10 cells, which represent `9 x 10 = 90` digits. // There is no special reason why I chose 10, it was the first number that I tried and it worked immediately. // The solution is found 100x faster now ... // // # Alternatives // I saw some people used clever `log` arithmetic to find the highest digits. // This works for the original Fibonacci numbers but not the generalized Fibonacci numbers of the Hackerrank problem. // // # Hackerrank // The user can define `F_1` and `F_2` as well as how many digits should be pandigital.
0
|
||||||
|
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
|
||||||
| 29.06.2018, 22:50 | ||||||
|
Вы бы ещё бином Ньютона применили
держите код:
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 30.06.2018, 00:10 [ТС] | |
|
Было бы все так просто) Вот только нужное мне число находиться на 329468 позиции и состоит из 68856 цифр) Видимо нам всем придется пока смириться что мы недостойны того парня который написал код который в моем предыдущем сообщении)
Добавлено через 47 минут Я наконец-то изучил его код. Структура работает так же, как в библиотеке больших чисел, которая у меня уже была. Только он ее упростил. Научил делать только сложение и все. В каждой ячейке(элементе массива) храниться число из 9 цифр. Когда ячеек больше 10, то он рандомно удаляет из середины ячейку, чтобы не считать все число целиком и пляска которая была у меня - не возникает, однако она по-любому, как мне кажется в какой-то ячейке должна быть, но нужные нам ячейки(конец и начало) она не затрагивает. В общем это решение конечно лучше, чем в первом моей сообщении, мне оно кажется более правильным) Но в моем решении из первого сообщения ограничить количество разрядов до 15(что я и сделал ранее) то эта пляска тоже меня не достигает. А искать алгоритм чтобы пляски не было это видимо сложнее, чем сама задача) Если я все верно понял, из того что написал то мое решение на 15% быстрей.
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 30.06.2018, 01:38 [ТС] | |
|
Кому интересно - прилагаю программу и исходник
0
|
|
| 30.06.2018, 01:38 | |
|
Помогаю со студенческими работами здесь
10
найти сумму цифр второго разряда всех чисел Каждое из двух заданных чисел циклически сдвинуть влево на 2 разряда Умножение чисел начиная с младших разряда множителей со сдвигом суммы частичных произведений вправо Сколько существует шестизначных чисел, если первая цифра разряда может быть нулем, число кратно 4
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|