<?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=209901&amp;view=findpost&amp;p=1760533</guid>
        <pubDate>Mon, 12 Nov 2007 02:32:31 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760533</link>
        <description><![CDATA[NetVir: Мда, <strong class='tag-b'>AndrЮshkA</strong>, ежели нет желания использовать матпакеты и сторонние библиотеки по работе с бигинтами, а так же, если при операции a^b(mod c) ты используешь числа a,b,c в пределах Longword&#39;a, то вот тебе красивый алгоритм,  который и сам использовал в далеком прошлом http://algolist.manual.ru/maths/count_fast/fast_exp.php]]></description>
        <author>NetVir</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760282</guid>
        <pubDate>Sun, 11 Nov 2007 16:50:53 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760282</link>
        <description><![CDATA[Dethlord: Народ че вы выдувываете-Я ЖЕ ПОСЧИТАЛ<br>
А данные храню в STRING можно туда запихнуть очень длинную строку(длинное число) <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="2007-11-11T16:52:10+00:00">11.11.07, 16:52</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=209901&view=findpost&p=1760262'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndrЮshkA &#064; <time class="tag-quote__quoted-time" datetime="2007-11-11T16:10:05+00:00">11.11.07, 16:10</time></span><div class='quote '>Dethlord, а с громадными числами это будет работать?</div></div><br>
да<br>
глупый вопрос после моего ответа  (255^1300)/(1432)]]></description>
        <author>Dethlord</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760274</guid>
        <pubDate>Sun, 11 Nov 2007 16:30:38 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760274</link>
        <description><![CDATA[Rose: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Dethlord, а с громадными числами это будет работать?</div></div><br>
<br>
Проблема громадных целых чисел в том, что их нужно как-то хранить. 8 байт, предоставляемыми Int64 явно недостаточно. Extended - тоже не подходит но не столько из-за размера (10 байт), сколько из-за специфики формата чисел с плавающей точкой. Вот, недавно обсуждалось:<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=209696' target='_blank'>чего я не дочитал в ф-ции Trunc ?</a><br>
Да и из-за размера тоже, сами подумайте, как число из &gt;100000 ДЕСЯТИЧНЫХ знаков поместится в 80 ДВОИЧНЫХ знаках? :)<br>
Для хранения таких чисел нужно заводить свой тип, а за основу брать, например, динамичесский массив, - размер можно менять динамически, получим столько двоичных знаков, сколько захотим. Именно так в FGInt и реализовано.]]></description>
        <author>Rose</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760262</guid>
        <pubDate>Sun, 11 Nov 2007 16:10:05 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760262</link>
        <description><![CDATA[AndrЮshkA: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=209901&view=findpost&p=1760253'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rose &#064; <time class="tag-quote__quoted-time" datetime="2007-11-11T15:56:45+00:00">11.11.07, 15:56</time></span><div class='quote '>А это для чего? Не для RSA часом?<br>
<br>
Если я правильно угадал, то используйте лучше библиотеку FGInt, Extended для хранения больших целых явно не подходит...<br>
http://www.submanifold.be/triade/GInt/gint.html</div></div><br>
да, для RSA, так и придется использовать GInt <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="2007-11-11T16:19:46+00:00">11.11.07, 16:19</time></span></span><br>
<strong class='tag-b'>Dethlord</strong>, а с громадными числами это будет работать? <br>
<br>
и почему мой вариант не прокатывает:(<br>
по идее все правильно]]></description>
        <author>AndrЮshkA</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760255</guid>
        <pubDate>Sun, 11 Nov 2007 16:01:08 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760255</link>
        <description><![CDATA[Dethlord: Взятие модуля<br>
<br>
 <br>
<br>
С этим алгоритмом пришлось изрядно повозиться из-за того, что операция Mod практически нигде не описана. Опять вспоминаем математику:<br>
<br>
A mod A=0<br>
<br>
A mod 1=0<br>
<br>
A mod B=C означает, что существует такое положительное целое число K, что B*K+C=A. C нам надо найти. Что ж, существует очень простой способ: отнимать от A число B до тех пор, пока A&gt;=B. В итоге получим C. Но представьте только, сколько операций вычитания придётся сделать при больших числах&#33;&#33;&#33; Надо как-то оптимизировать вычитание. До сих пор мы не использовали число K. Каким оно может быть? K может быть разложено на произведение чисел. Чем оптимальнее будут выбраны эти числа, тем лучше&#33; Самое лучшее решение, что приходит в голову: выбирать K поразрядно (по степеням 10). Протестируем идею - рассмотрим пару примеров:<br>
<br>
1.       1234 mod 7=2<br>
<br>
2.       1237 mod 70=44           44 mod 7=2<br>
<br>
3.       1237 mod 700=534       534 mod 70=44 44 mod 7=2<br>
<br>
 <br>
<br>
Значит, мы можем варьировать значением числа K~B (с определёнными условиями)&#33;<br>
<br>
Воплощаем мысль в алгоритм:<br>
<br>
 <br>
<br>
1.       Откинем все частные случаи и тогда получим, что: A&gt;B<br>
<br>
2.       Итак, если A&gt;B:<br>
<br>
3.       Будем умножать B на 10 до тех пор, пока длины чисел A и B не сравняются.<br>
<br>
4.       Если A=B, то mod=0<br>
<br>
5.       Если A&lt;B, то получается, что мы переборщили с умножением -&gt; делим B на 10<br>
<br>
6.       Поочерёдно умножаем B на i=1,2,3,… пока B не станет больше A<br>
<br>
7.       Берём предыдущее число (i), на которое было умножено B, и выполняем A=A-B*i<br>
<br>
8.       Идём на шаг 2<br>
<br>
9.       Результат=A<br>
<br>
 <br>
<br>
Возможно, пример поможет понять алгоритм:<br>
<br>
 <br>
<br>
356395 mod 37=C, C=?<br>
<br>
A=356395<br>
<br>
B=37<br>
<br>
 <br>
<br>
A&gt;B – верно<br>
<br>
Умножаем B на 10, пока длины не сравняются: B=370000<br>
<br>
B&gt;A – с нулями мы переборщили =&gt; B=37000              ** умножили на 1000<br>
<br>
B*1=37000<br>
<br>
B*2=74000<br>
<br>
B*3=111000<br>
<br>
B*4=148000<br>
<br>
B*5=185000<br>
<br>
B*6=222000<br>
<br>
B*7=259000<br>
<br>
B*8=296000<br>
<br>
B*9=333000<br>
<br>
B*10=37000 B&gt;A – верно<br>
<br>
A=A-B*9=356395-333000=23395                                              ** умножили на 9<br>
<br>
 <br>
<br>
A=23395<br>
<br>
B=37<br>
<br>
 <br>
<br>
A&gt;B – верно<br>
<br>
B=37000 – перебор =&gt; B=3700                                               ** умножили на 100<br>
<br>
B*1=3700<br>
<br>
B*2=7400<br>
<br>
B*3=11100<br>
<br>
B*4=14800<br>
<br>
B*5=18500<br>
<br>
B*6=22200<br>
<br>
B*7=25900 B&gt;A – верно<br>
<br>
A=A-B*6=23395-22200=1195                                       ** умножили на 6<br>
<br>
 <br>
<br>
A=1195<br>
<br>
B=37<br>
<br>
 <br>
<br>
A&gt;B – верно<br>
<br>
 <br>
<br>
B=3700 – перебор =&gt; B=370                                       ** умножили на 10<br>
<br>
B*1=370<br>
<br>
B*2=740<br>
<br>
B*3=1110<br>
<br>
B*4=1480 B&gt;A – верно<br>
<br>
A=A-B*3=1195-1110=85                                                          ** умножили на 3<br>
<br>
 <br>
<br>
A=85<br>
<br>
B=37<br>
<br>
 <br>
<br>
B=370 – перебор, B=37                                                           ** умножили на 1<br>
<br>
B*1=37<br>
<br>
B*2=74<br>
<br>
B*3=111 B&gt;A – верно<br>
<br>
A=A-B*2=85-74=11                                                     ** умножили на 2<br>
<br>
 <br>
<br>
A=11<br>
<br>
B=70<br>
<br>
 <br>
<br>
A&lt;B =&gt; C=11<br>
<br>
 <br>
<br>
Всего потребовалось: 4 вычитания и 19 сложений (куда пропали умножения, смотрите в исходном коде)<br>
<br>
А если бы мы пользовались простыми вычитаниями, то их потребовалось бы: 9632 штуки&#33;&#33;&#33; Кстати, это и есть число K – целая часть от деления A на B, а ведь из приведённого примера мы можем вычленить это число, если обратим внимание на строки, помеченные **: если выпишем вынесенные числа, то получим: 1000 9 100 6 10 3 1 2. А теперь расставим арифметические знаки: 1000*9+100*6+10*3+1*2=9632. Это свойство используется в алгоритме деления&#33;&#33;&#33; <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="2007-11-11T16:07:31+00:00">11.11.07, 16:07</time></span></span><br>
а если вам нужно произвести арихм операцию (255^1300)/(1432) то ОТВЕТ:<br>
<br>
221968601687332940125473524001319167290690145331700911850517840694228359295951886904985116094947547560094393732587243030884636739478396186644213022368492295652669032674751111423710402265673553683739057056590811557750698070255649386179432599281174635164697046623002194031036924296496405207339746375766234204743513373287380132357946126518892683558694975158993687228337360914916795129194351108101285572771172765471395796980915929204001621236624985029012519860678472532294688844970164121322454811228892727326201193037612120602091397997052064517727252745692840237420848059334701276742531724785505507932540824438253738252427401147011653769174797302468210812442826908646125866468373060082132211971214133447620298308191756877456939971016172596004036990927026947793396002591066398665454215153744453436811038000117260772265216224319917416283053015429970317652166956656269547478486634773879748529341469082904764581937167915822819479862276525418819583867146948523151432608010425673681889351969730996127057659260198868276807118860056734410043771688327361040312328874227770038928179238408306946670975492857491843306398068328669153177225773469898786817688727685953245061725474702724514168553659853170075289886029974297936207176281886796064827168782639380275560792337024230517592779976424275989797172286525018371603046155323988270637301056416310953232882382977457826428750472160824966468344761978721100150180562939610659163799192712653455032436432333411785988606383193300111538613167003183079951935275397677008263753282488869497133670328956201006888010413777370347542594935077918474161930753848235783506597343568176197949607624516495948998543400377771631018065000268251205972220356172710886978703608104011199024605705146105004341385768293728193503991652454540451725876696373589503369513937962783223369506817971462349378638078557013995161500758689230323194454645609907359980770659583707808287148125013346009970885211731523362700455808670849412897881733478454834087345333565098881455030593410941668085529622541321713147698303475054952900340209671830899291674281569265609428708718273385074388187771644685517825932015857206508608781519646351245605760432245812772597097490966910545621841924501371733482011312920147897355779743692035553310991765527714776571387155273625140810201431937098983760304038407108779033652252910113162894593313745096282190619405269661483647206265275191703290841774872729791350991591551589765192769283457753354500201642634244079107417691152725878468783687801042886036311861935589708952442629450952019470403809520180725486907439244820803053467263171054428234558471057132918692907696097390711176427979793939258775772016097420284711258516442187561616238703695779899794372445271032891810928016294739329178545379323338739847180334013216060431222499684732811138973183576766390925560455332042259715311843023622475492264158856198049066576711239479695283411351873054356535612311726466236795098861163762853961191249986651903121344756536158335386538748380525525176301126941407582795604220800045545952608301057503880253989749662893516637136224120032935045518543116468735529850132346396672219555764668976761881041112658307580641528081627,761<br>
<br>
 :wall:  :lool:  :tong:  :wacko:  :)]]></description>
        <author>Dethlord</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760253</guid>
        <pubDate>Sun, 11 Nov 2007 15:56:45 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760253</link>
        <description><![CDATA[Rose: А это для чего? Не для RSA часом?<br><br>Если я правильно угадал, то используйте лучше библиотеку FGInt, Extended для хранения больших целых явно не подходит...<br>http://www.submanifold.be/triade/GInt/gint.html]]></description>
        <author>Rose</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760246</guid>
        <pubDate>Sun, 11 Nov 2007 15:37:42 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760246</link>
        <description><![CDATA[AndrЮshkA: winsoft, читай внимательней:)]]></description>
        <author>AndrЮshkA</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760244</guid>
        <pubDate>Sun, 11 Nov 2007 15:33:32 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760244</link>
        <description><![CDATA[winsoft: <strong class='tag-b'>AndrЮshkA</strong>, юзаем оператор <strong class='tag-b'>mod</strong>]]></description>
        <author>winsoft</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760239</guid>
        <pubDate>Sun, 11 Nov 2007 15:27:32 +0000</pubDate>
        <title>как найти остаток от деления огромных чисел?</title>
        <link>https://forum.sources.ru/index.php?showtopic=209901&amp;view=findpost&amp;p=1760239</link>
        <description><![CDATA[AndrЮshkA: делал так<br>a,b,c:extended;<br><br><br>c:=a-b*int(a/b);<br><br>вроде по идее должно работать, но выдает 0]]></description>
        <author>AndrЮshkA</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	