Каков наиболее эффективный способ получить цифры числа?
Начнем с примера:
Представьте себе последовательность Фибоначчи. Теперь предположим, что мы хотим знать, какое число Фибоначчи первым имеет 1000 цифр (в представлении с основанием 10). До 308 цифр (1476-е число Фибоначчи) мы можем легко сделать это, используя logBase 10 <number>
. Если число больше 1476-го числа Фибоначчи, logBase
вернет Infinity
, и расчет завершится ошибкой. Проблема в том, что 308 несколько далеко от 1000, что было нашей первоначальной целью.
Возможное решение состоит в том, чтобы преобразовать число, количество цифр которого мы хотим узнать, в строку и использовать ее длину для определения количества цифр. Это немного неэффективно для моих целей, потому что попытка этого с 10000 требует сладкого времени.
Наиболее эффективный метод показан в других вопросах. жестко кодирует все возможные случаи, которые я на самом деле не хочу делать, особенно потому, что количество цифр превышает 10, как это необходимо в предлагаемых решениях.
Итак, чтобы вернуться к моему вопросу: каков наилучший (наиболее эффективный) способ определить количество цифр в базе 10 чисел? Действительно ли он преобразует его в строку и использует его длину, или есть какие-то «хакерские» трюки, такие как 0x5f3759df?
Примечание. Я ценю решения на любом языке, даже если он помечен как «haskell».
10^10000
в последовательности Фибоначчи? Нет ли способа легко определить log10 функции видаa^x
, где для чисел Фибоначчиa
равно золотому сечению? 29.07.2014phi ^ x
не будет числом Фибоначчи. Связь золотого сечения с числами Фибоначчи заключается в том, что отношение между соседними элементами последовательности Фибоначчи приближается кphi
по мере приближения к бесконечности. Если вы хотите ускорить его, вероятно, лучшее, что вы получите, это выяснить точные детали, чтобы знать, чтоdigitCount n
приблизительно равно2 * digitCount (2 * sqrt n)
, и вместо того, чтобы делить несколько миллионов раз, вы просто получите квадратный корень из a несколько сотен вместо этого. 29.07.2014logBase 10
. Я не знаю, будет ли это быстрее, я думаю, это зависит от того, насколько быстрой является функцияlogBase
. 29.07.2014