<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365725</guid>
        <pubDate>Thu, 17 Oct 2013 19:19:36 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365725</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3365663'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Progresor &#064; <time class="tag-quote__quoted-time" datetime="2013-10-17T20:37:56+04:00">17.10.13, 16:37</time></span><div class='quote '>Вот что я обнаружил когда было нечего делать в поезде:<br>
5^2=1+3+5+7+9</div></div> Вообще-то этот ряд в школе изучается, и по идее всем должен быть известен. Любой квадрат есть сумма соответствующего количества последовательных нечётных чисел начинающейся с 1.<br>
Экономии при вычислении степени это не даёт, поскольку даёт степенную зависимость времени вместо логарифмической.<br>
<br>
Вообще степень 25 - неудачный пример, для него разложение на степени 2 оптимально.<br>
25 = 16 + 8 + 1<br>
25 = (4 + 1)*(4 + 1)<br>
В обоих случаях необходимо 6 умножений]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365663</guid>
        <pubDate>Thu, 17 Oct 2013 16:37:56 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365663</link>
        <description><![CDATA[Progresor: Вот что я обнаружил когда было нечего делать в поезде:<br>
5^2=1+3+5+7+9<br>
<br>
т е<br>
Число в степени 2 есть сумма колличества чисел чередующихся через 2<br>
мож как то поможет :) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-17T16:39:58+00:00">17.10.13, 16:39</time></span></span><br>
может быть и для других степеней есть закономерности?]]></description>
        <author>Progresor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365287</guid>
        <pubDate>Thu, 17 Oct 2013 04:02:51 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365287</link>
        <description><![CDATA[amk: Я вчера запустил поиск для 191, еле дождался результата. Число простое, но найдено на удивление много вариантов. Достигнутая экономия - два умножения (11 против 13).<br>
Среди оптимальных цепочек не все можно построить на основе последней достигнутой степени. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-17T04:26:47+00:00">17.10.13, 04:26</time></span></span><br>
Сейчас посмотрел этот список.<br>
Судя по нему выигрыш составляет:<br>
в 1124 случаях ничего;<br>
в 2558 - экономится 1 умножение;<br>
в 3245 - 2;<br>
в 1765 - 3;<br>
в 953 - 4;<br>
в 322 - 5;<br>
в 24 - 6;<br>
в 10 - 7.<br>
В среднем выигрыш составляет 11.22%, при максимуме 31.82% <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-17T04:35:06+00:00">17.10.13, 04:35</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3365283'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavlovsky &#064; <time class="tag-quote__quoted-time" datetime="2013-10-17T03:19:42+00:00">17.10.13, 03:19</time></span><div class='quote '>Будьте осторожнее в своих исследдованиях. Задача NP-полная. Вот так случайно найдете эффективный алгоритм и рухнет целое направление в математике.</div></div> Ну я, когда писал программу сразу догадался о NP-полноте. Поэтому просто ищу оптимум перебором с возвратами. Ограничивая длину цепочки текущим оптимумом и взяв в качестве начальной обычную последовательность.<br>
<br>
Я ещё как-то вручную исследовал эту задачу на предмет короткого вычисления с ограниченной памятью (классический алгоритм требует максимум двух ячеек). Для вычисления в стеке калькуляторов Б3-34, МК-52.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365283</guid>
        <pubDate>Thu, 17 Oct 2013 03:19:42 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365283</link>
        <description><![CDATA[Pavlovsky: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3365153'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2013-10-16T14:47:45+00:00">16.10.13, 14:47</time></span><div class='quote '>Не впечатлило. Я добрался до 187 (думал, что до 255, но оказалось меньше), не которые степени имеют несколько оптимальных вариантов. Серьёзного выигрыша ни на одной из этих степеней не получил.<br>
<br>
Почти все найденные оптимальные варианты являются произведением двух сомножителей с малым числом единиц плюс, может быть, малое число, участвующее в вычислении одного из сомножителей. По крайней мере среди оптимальных почти всегда есть составное.</div></div><br>
<br>
Будьте осторожнее в своих исследдованиях. Задача NP-полная. Вот так случайно найдете эффективный алгоритм и рухнет целое направление в математике.  :D <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-17T03:20:41+00:00">17.10.13, 03:20</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3365220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2013-10-16T18:31:29+00:00">16.10.13, 18:31</time></span><div class='quote '>Вот блин, а я думал, что там и до многих тысяч всё рассчитали...</div></div><br>
По ссылке есть таблица до 10001 (Десять тысяч один).]]></description>
        <author>Pavlovsky</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365220</guid>
        <pubDate>Wed, 16 Oct 2013 18:31:29 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365220</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3365153'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2013-10-16T14:47:45+00:00">16.10.13, 14:47</time></span><div class='quote '>Не впечатлило. Я добрался до 187 (думал, что до 255, но оказалось меньше)</div></div>Вот блин, а я думал, что там и до многих тысяч всё рассчитали...]]></description>
        <author>Славян</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365153</guid>
        <pubDate>Wed, 16 Oct 2013 14:47:45 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365153</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3364879'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavlovsky &#064; <time class="tag-quote__quoted-time" datetime="2013-10-16T06:05:04+00:00">16.10.13, 06:05</time></span><div class='quote '>Length of shortest addition chain for n</div></div> Не впечатлило. Я добрался до 187 (думал, что до 255, но оказалось меньше), не которые степени имеют несколько оптимальных вариантов. Серьёзного выигрыша ни на одной из этих степеней не получил.<br>
<br>
Почти все найденные оптимальные варианты являются произведением двух сомножителей с малым числом единиц плюс, может быть, малое число, участвующее в вычислении одного из сомножителей. По крайней мере среди оптимальных почти всегда есть составное.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Короткая записка, которую я при этом написал для себя</div><div class="body">Простые показатели, вычисляемые быстрее, чем по классической схеме<br>
<br>
23=20+3=18+5, 31=30+1=27+4=22+9, 43=40+3=34+9, 59=51+8=56+3, 61=60+1,<br>
83=80+3, 103=102+1, 107=99+8=104+3=13*8+3=(3*4+1)*8+3, 109=108+1,<br>
127=126+1, 149=144+5, 151=150+1, 163=160+3=(2+3)*32+3, 167=166+1,<br>
173=172+1, 179=163+16=170+9=176+3=(3+8)*16+3, 181=180+1,<br>
<br>
Показатели, составные решения которых хуже прямого вычисления,<br>
(являющегося оптимальным)<br>
<br>
33=3*11=32+1, 49=7*7, 65=5*13, 121=11*11, 129=3*43, 133=7*19, 145=5*29<br>
<br>
Составные показатели, не имеющие среди оптимальных составного решения<br>
<br>
77=7*11=(5+4)*8+5=(9+8)*4+9<br>
<br>
Составные показатели, оптимальноe решениe которых лучше классического,<br>
но для которого выделяется не минимальный сомножитель<br>
<br>
165=3*5*11=5*33<br>
<br>
   Вывод, который можно сделать, анализируя проверенные степени - в<br>
случае составного показателя степени за редким исключением среди<br>
оптимальных решений находится либо классическое поразрядное вычисление,<br>
либо выделение из показателя минимального простого множителя, и<br>
последовательное возведение в эти степени.<br>
   Второе наблюдение - поиск перебором зависит от количества делителей<br>
числа. Так для простых чисел поиск оптимальных стратегий вычислений<br>
обычно происходит довольно быстро, и вариантов бывает не так много, как<br>
для составных.<br>
   В любом случае, для не слишком больших показателей (проверены<br>
показатели вплоть до до 186) оптимизация позволяет сэкономить не более<br>
1-2 умножений, что составляет 10-15% от числа умножений классического<br>
метода.</div></div><br>
С увеличением степени выигрыш увеличивается, но и поиск оптимальной цепочки занимает всё больше времени.<br>
Не вполне уверен (не проверял), но похоже, что в оптимальных цепочках в образовании каждой следующей степени участвует последняя из уже достигнутых степеней. Это может ускорить поиск цепочки]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365090</guid>
        <pubDate>Wed, 16 Oct 2013 12:41:06 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3365090</link>
        <description><![CDATA[Славян: Блеск&#33;]]></description>
        <author>Славян</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3364879</guid>
        <pubDate>Wed, 16 Oct 2013 06:05:04 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3364879</link>
        <description><![CDATA[Pavlovsky: Length of shortest addition chain for n<br>
<a class='tag-url' href='http://oeis.org/A003313' target='_blank'>http://oeis.org/A003313</a>]]></description>
        <author>Pavlovsky</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360811</guid>
        <pubDate>Wed, 02 Oct 2013 21:29:56 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360811</link>
        <description><![CDATA[Рябчиков-Жуй: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2013-10-02T05:32:04+00:00">02.10.13, 05:32</time></span><div class='quote '> Правда, что за теорема - пока не понял. </div></div><br>
<br>
Вероятно, <a class='tag-url' href='http://en.wikipedia.org/wiki/Scholz_conjecture' target='_blank'>эта</a> (хотя она не теорема, а гипотеза).]]></description>
        <author>Рябчиков-Жуй</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360810</guid>
        <pubDate>Wed, 02 Oct 2013 21:13:10 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360810</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2013-10-02T05:32:04+00:00">02.10.13, 05:32</time></span><div class='quote '>Где-то читал, что выигрыш может достигать 1.5</div></div> <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2013-10-02T05:32:04+00:00">02.10.13, 05:32</time></span><div class='quote '>Не где-то, а на нашем форуме в этой теме:</div></div> Там рассматривалось очень хорошая степень: 65535 = 3*5*17*257. Каждый из сомножителей содержит ровно 2 единицы. Соответственно для подстепеней требуемое число умножений равно 2, 3, 5 и 9, в сумме 19 (против 30 обычным способом). К сожалению, такие хорошие числа скорее исключение, чем правило.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360509</guid>
        <pubDate>Wed, 02 Oct 2013 05:32:04 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360509</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360465'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2013-10-01T18:03:42+00:00">01.10.13, 18:03</time></span><div class='quote '>Пригодиться то в деле сможет только степень до 1000 ну или до 10000.</div></div><br>
Вы всегда додумываете то, о чем не говорилось?  :D На всякий случай выделю основное:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360016'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Kew &#064; <time class="tag-quote__quoted-time" datetime="2013-09-30T14:51:33+00:00">30.09.13, 14:51</time></span><div class='quote '>Ограниченный вариант задачи (для компилятора С, оптимизирующего выражение вида a*a*a*a*...*a  ): N ограничено сверху величиной 2<sup class='tag-sup'>31</sup>-1.</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-02T05:32:56+00:00">02.10.13, 05:32</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2013-10-02T04:17:50+00:00">02.10.13, 04:17</time></span><div class='quote '>Обнаружил, что для степеней меньших 256 иногда удаётся сэкономить 1, и совсем редко 2 умножения.</div></div><br>
Где-то читал, что выигрыш может достигать 1.5 :) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-02T05:35:45+00:00">02.10.13, 05:35</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=3360509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2013-10-02T05:32:04+00:00">02.10.13, 05:32</time></span><div class='quote '>Где-то читал, что выигрыш может достигать 1.5 </div></div><br>
Ну как &quot;где-то&quot;. Не где-то, а на нашем форуме в <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=250592' target='_blank'>этой </a>теме: <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=381894&view=findpost&p=2076012'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>albom &#064; <time class="tag-quote__quoted-time" datetime="2008-09-24T13:39:48+00:00">24.09.08, 13:39</time></span><div class='quote '>Если изходить из теоремы Браура, то метод, основанный на возведение в квадрат, в среднем будет требовать в 1.5 раза больше умножений.</div></div><br>
Правда, что за теорема - пока не понял.]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360499</guid>
        <pubDate>Wed, 02 Oct 2013 04:17:50 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360499</link>
        <description><![CDATA[amk: Я пробовал когда то решить эту задачу. Обнаружил, что для степеней меньших 256 иногда удаётся сэкономить 1, и совсем редко 2 умножения. Учитывая, сколько времени у меня занимало решение для степеней больше 100 (и использование памяти), я решил, что экономия в среднем 1 процента умножений (пусть даже для больших степеней поучится 2 процента) не стоит таких затрат.<br>
<br>
Обычно экономия достигалась, когда удавалось разложить степень в вид M*N+K (K=0,1,2), и M, N содержали мало единиц. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-10-02T04:20:26+00:00">02.10.13, 04:20</time></span></span><br>
Такая экономия имеет смысл при вычислении фиксированных степеней, которые обычно малы. На них как правило сократить число умножений не получается.<br>
Большие степени обычно каждый раз разные, и поиск оптимального алгоритма съест всю возможную экономию.]]></description>
        <author>amk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360465</guid>
        <pubDate>Tue, 01 Oct 2013 18:03:42 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360465</link>
        <description><![CDATA[Славян: Ну и что, что NP-полная. Пригодиться то в деле сможет только степень до 1000 ну или до 10000.<br>
Первый шаг думаю так: берёте и считаете минимальное кол-во умножений для степеней от 1 до 6..7.<br>
Получаете последовательность натур. чисел.<br>
С ней идёте в OEIS. Вдруг там найдёте.<br>
Если <strong class='tag-b'>да</strong>, то проверьте на других степенях.<br>
Если <strong class='tag-b'>нет</strong>, то придётся самому алгоритм ваять...]]></description>
        <author>Славян</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360169</guid>
        <pubDate>Tue, 01 Oct 2013 06:48:31 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360169</link>
        <description><![CDATA[OpenGL: Самый быстрый способ, ЕМНИП, NP-полная задача :)]]></description>
        <author>OpenGL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360103</guid>
        <pubDate>Mon, 30 Sep 2013 22:07:53 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360103</link>
        <description><![CDATA[Kew: Имеется ввиду, способ находить <strong class='tag-b'><em class='tag-i'>более короткие</em></strong> чем разложение по степеням  двойки последовательности операций?]]></description>
        <author>Kew</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360102</guid>
        <pubDate>Mon, 30 Sep 2013 21:41:08 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360102</link>
        <description><![CDATA[shm: <strong class='tag-b'>Kew</strong>, этот способ был известен еще 100 лет назад и сейчас описан практически в любой околоалгоритмической книжке.]]></description>
        <author>shm</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360016</guid>
        <pubDate>Mon, 30 Sep 2013 14:51:33 +0000</pubDate>
        <title>Ннууоооочень быстрое возведение в степень - ?</title>
        <link>https://forum.sources.ru/index.php?showtopic=381894&amp;view=findpost&amp;p=3360016</link>
        <description><![CDATA[Kew: Возведение в огромную целую степень огромных целых чисел (по модулю) -- достаточно распространенная &quot;стандартно-билиотечная&quot; операция в многих средах разработки, т.к, она используется в реализациях схем шифрования с открытым ключом, распространения ключей и электронной цифровой подписи.<br>
<br>
Известен достаточно быстрый алгоритм возведения в целую степень, работающий за время O(log N) (где N - показатель степени):<br>
1. Показатель степени представляется в виде суммы степеней двойки (таких будет не более log2 N)<br>
2. Последовательным возведением в квадрат вычисляются сомножители, соответствующие степеням с показателем 2<sup class='tag-sup'>k</sup> (разумеется, их тоже потребуется не более, чем log2 N)<br>
3. Сомножители, соответствующие участвующим в разложении показателя степеням двойки перемножаются (это еще не более, чем log2 N операций)<br>
<br>
Пример:<br>
<br>
15 = 1 + 2<sup class='tag-sup'>1</sup> + 2<sup class='tag-sup'>2</sup> + 2<sup class='tag-sup'>3</sup>  = 1 + 2 + 4 + 8<br>
a<sup class='tag-sup'>15</sup> = a<sup class='tag-sup'>1</sup>*a<sup class='tag-sup'>2</sup>*a<sup class='tag-sup'>4</sup>a<sup class='tag-sup'>8</sup> = a<sup class='tag-sup'>1 + 2 + 4 + 8</sup><br>
<br>
Посчитаем умножения:<br>
а) степени двойки<br>
 1. получим a<sup class='tag-sup'>2</sup><br>
 2. из уже имеющегося a<sup class='tag-sup'>2</sup> получим a<sup class='tag-sup'>4</sup><br>
 3. из уже имеющегося a<sup class='tag-sup'>4</sup> получим a<sup class='tag-sup'>8</sup><br>
б) перемножение<br>
 4. из уже имеющихся a и a<sup class='tag-sup'>2</sup> получим a<sup class='tag-sup'>3</sup><br>
 5. из уже имеющихся a<sup class='tag-sup'>3</sup> и a<sup class='tag-sup'>4</sup> получим a<sup class='tag-sup'>7</sup><br>
 6. из уже имеющихся a<sup class='tag-sup'>7</sup> и a<sup class='tag-sup'>8</sup> получим a<sup class='tag-sup'>15</sup><br>
итого для возведения в степень 15 потребовалось 6 операций умножения<br>
<br>
Однако, показатель степени 15 замечателен тем, что он является первым (наименьшим) показателем, для которого возможен более быстрый (в штуках умножений) способ:<br>
<br>
a<sup class='tag-sup'>15</sup> = a<sup class='tag-sup'>5</sup> * a<sup class='tag-sup'>5</sup> * a<sup class='tag-sup'>5</sup><br>
a<sup class='tag-sup'>5</sup> = a * (a<sup class='tag-sup'>2</sup>)<sup class='tag-sup'>2</sup><br>
требующий всего пяти умножений.<br>
<br>
Вот их перечисление, для наглядности:<br>
<br>
1. получим a<sup class='tag-sup'>2</sup><br>
2. получим a<sup class='tag-sup'>4</sup><br>
3. получим a<sup class='tag-sup'>5</sup><br>
4. получим a<sup class='tag-sup'>10</sup><br>
5. получим a<sup class='tag-sup'>15</sup><br>
<br>
Задача состоит в том, чтобы для заданного показателя степени N найти самый быстрый способ возведения числа в N-ю степень. Одно умножение (оно по модулю некоего ограниченного числа) будем считать операцией константной (единичной) сложности.<br>
<br>
Ограниченный вариант задачи (для компилятора С, оптимизирующего выражение вида a*a*a*a*...*a :) ): N ограничено сверху величиной  2<sup class='tag-sup'>31</sup>-1.]]></description>
        <author>Kew</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	