Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
А тут 2 уровня проверки - quick and dirty проверка последних 9 цифр (считаются по модулю 10^9), и только если они пандигитальны - заставляю gmp вычислить число полностью, и смотрю в нем первые 9 цифр.
Так если тебе всё равно приходится считать 100500е число Фибоначчи по-честному, то не лучше ли делать это сразу? Причём изначально храня его в строке в 10ичном виде.
Дело в том, что по-честному считаются 30-40 чисел (не помню сколько их точно), а по-читерски дофига. Плюс GMP довольно быстро ищет конкретное число по его номеру 🙂
Не очень понял - есь возможность честно посчитать 100500е число Фибоначчи, не посчитав 100499е, 100498е, 100497е итд?
Я в курсе про формулу для общего члена, но неужели она применима для длинных чисел?
Если возводить ее по-тупому - получаем все числа фибоначчи по порядку. Если же воспользоваться быстрым возведением в степень (например через битовое разложение n) - то можно быстро найти нужное нам число за О(log(n)) умножений...
Проканал вот такой вариант - правую часть считаю int'ами как и раньше, а левую даблами, периодически деля их на 10. Обе части по одной формуле c=a+b; a=b; b=c.
На числах, используемых в задаче, расхождений с gmp не замечено.
Выкопал из анналов свое тупейшее решение http://pastebin.com/rFzLZtLb - 0.8с.
http://gmplib.org/manual/Fibonacci-Numbers-Algorithm.html#Fibonacci-Numbers-Algorithm
Я в курсе про формулу для общего члена, но неужели она применима для длинных чисел?
Если возводить ее по-тупому - получаем все числа фибоначчи по порядку. Если же воспользоваться быстрым возведением в степень (например через битовое разложение n) - то можно быстро найти нужное нам число за О(log(n)) умножений...
В gmp используется похожая формулка.
А нельзя ли попробовать воспользоваться формулой Ф^n? Точности первых 9 знаков как раз хватит.
На числах, используемых в задаче, расхождений с gmp не замечено.
vk.com/id29482
Ты ему пиши, вот сюда: brightstar@amegas.ru