Решающие силовые башни - PullRequest
3 голосов
/ 15 января 2011
a=2^Power[10^6, 10^9] 3^Power[4^9, 7^5]
TwoTower[n_] := Nest[2^# &, 1, n]

Какой самый маленький n такой, что TwoTower[n]>a? У этого вопроса был ответ с ручкой и бумагой на Quora, есть ли способ использовать Mathematica здесь?

1 Ответ

3 голосов
/ 15 января 2011

Просто некоторые мысли (не проверял тщательно).Если мы последуем предложению в этой ссылке и начнем брать логи (база 2), первое, что кажется очевидным, это то, что мы можем безопасно забыть префактор (степень 3), так как

Log[Log[a*b]] = Log[Log[a]+Log[b]] = Log[Log[a]]+Log[1+Log[b]/Log[a]] = 
= Log[Log[a]] + Log[b]/Log[a] + O((Log[b]/Log[a])^2), Log[b]<<Log[a]

, где a - это степень 2, а b - это степень 3. Тогда мы можем сосредоточиться только на степени 2. Если мы определим нашу версию log и power:

Clear[log2,power];
log2[2] = 1;
log2[1] = 0;
log2[a_*b_] := log2[a] + log2[b];
log2[a_^b_] := b*log2[a];
log2[power[a_, b_]] := b*log2[a]; 

Тогда, похоже, ответ дает следующее:

In[62]:= 
    Length[NestWhileList[N[Log[2, #]] &,log2[log2[log2[ 2^power[10^6, 10^9]]]] /. 
           log2 -> (N[Log[2, #]]&), # > 1 &]] - 1 + 3

Out[62]= 7

Мы вычитаем 1 из-за того, как работает NestWhile (последний элемент уже нарушает условие), и добавляем 3, потому что мы уже применили log2 3 раза, довходя в NestWhileList.Я не смог прочитать все комментарии по этой ссылке, не зарегистрировавшись на сайте, поэтому я не знаю их ответа или каков правильный ответ.

Редактировать:

Это произошлоЯ считаю, что вышеупомянутое решение может быть выражено немного более элегантно, так что никакого человеческого взаимодействия вообще не требуется:

ClearAll[log2, power];
log2[2] = 1;
log2[1] = 0;
log2[a_*b_] := log2[a] + log2[b];
log2[(power | Power)[a_, b_]] := b*log2[a];
log2[x : (_Integer | _Real)] := N[Log[2, x]];
power[a_, b_] :=
   With[{eval = Quiet[Check[Power[a, b], $Failed]]},
     eval /; (eval =!= $Failed)]

Тогда само решение выглядит немного проще:

In[8]:=Length[NestWhileList[log2,2^power[10^6, 10^9], ! FreeQ[#, power] || # > 1 &]] - 1

Out[8] = 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...