|  |  | 
|  14.11.2014, 11:32 | #1012 | 
| Junior Member Регистрация: 13.06.2010 
					Сообщений: 18
				 |   | 
| --------- ...отцвели голубые, все цветы полевые... | |
|   |   | 
|  14.11.2014, 12:14 | #1013 | 
| Silver Member Регистрация: 07.02.2013 
					Сообщений: 718
				 |   | 
|   |   | 
|  15.11.2014, 18:02 | #1014 | 
| Gold Member Регистрация: 25.06.2005 Адрес: F000:FFF0 
					Сообщений: 1,830
				 |   
			
			Удалось написать и отладить весьма быстрый алгоритм извлечения целочисленного  корня N-й степени из целого числа произвольной разрядности. В основе старый доб- рый метод Ньютона, однако его сходимость напрямую зависит от начального прибли- жения, и при неудачном выборе - миллиарды итераций, и крайне медленно сходится. Выкладываю дзен-решение, формирующее начальное приближение, за счет которого метод Ньютона сходится всего за 2-15 итераций, и, например, корень 50000 степени из 1000000-разрядного целого числа, вычисляется за 6 итераций, по времени 0,1 сек. P.S. FirstNonZeroBit - номер старшего ненулевого бита числа в двоичном представлении, по сути - очень быстрый способ вычисления целочисленного логарифма по основанию 2. Код: restart:
with(Bits): 
IntRoot:= proc(x,n) local a,b,q,u,v,f,it:
  if (n = 1) then
    it:= 0:
    return(x,it):
  end if:
  if ((x = 0) and (n > 1)) then
    it:= 0:
    return(0,it):
  end if:
  if ((x >= 1) and (n > 1)) then
    q:= FirstNonzeroBit(x):
    u:= trunc(q/n):
    v:= frac(q/n):
    f:= ceil(n*(2^v)):
    a:= iquo((2^u)*f,n):
    b:= iquo(x,a^(n-1)): 
    if (a < b) then
      u:= trunc((q+1)/n):
      v:= frac((q+1)/n):
      f:= ceil(n*(2^v)):
      a:= iquo((2^u)*f,n):
      b:= iquo(x,a^(n-1)): 
    end if:
    it:= 1:
    while (a > b) do
      a:= iquo((n-1)*a+b,n):
      b:= iquo(x,a^(n-1)):
      it:= it + 1:
    end do:  
    return(a,it):
  end if:
end proc:
x:= 7*10^1000000:
n:= 50000:
IntRoot(x,n);
a = 100003891896030419242, it = 6n, q, u, f: Int64 v: Extended Последний раз редактировалось Paul Kellerman; 15.11.2014 в 20:29. | 
|   |   | 
|  16.11.2014, 12:01 | #1015 | 
| Gold Member Регистрация: 04.05.2007 Адрес: Северное Реутово 
					Сообщений: 2,476
				 |   
			
			Что же, друзья. Прошел отдых в Египте, за время которого я неплохо отдохнул, подзагорел и накупался. Плюс съездил в Израиль, побывал в Палестине. Прошелся по намоленным местам. Считаю, отлично развеялся, пора и на работу завтра    | 
|   |   | 
|  16.11.2014, 12:06 | #1016 | 
| Silver Member Регистрация: 07.02.2013 
					Сообщений: 718
				 |   | 
|   |   | 
|  17.11.2014, 11:22 | #1017 | 
| Junior Member Регистрация: 13.06.2010 
					Сообщений: 18
				 |   
			
			Воду дали...я умер от счастья
		 | 
| --------- ...отцвели голубые, все цветы полевые... | |
|   |   | 
|  17.11.2014, 12:13 | #1018 | 
| Silver Member Регистрация: 07.02.2013 
					Сообщений: 718
				 |   | 
|   |   | 
|  17.11.2014, 16:43 | #1019 | 
| Gold Member Регистрация: 04.05.2007 Адрес: Северное Реутово 
					Сообщений: 2,476
				 |   
			
			Dr SG, кстати, впервые тесно общался там с англичанами, на мой американизированный акцент они морщились, но альтернатив не было, терпели. Хотя на мое "Вээ дид ю гет зет глэс" было получено презрительное "Глааас из он зе тейбл"  Пробовал выводить их заоблачные трели, но мое горло видимо не может это повторить  Пою мимо нот все время, никак не попаду. Вот вы как разговаривате? С этим "английским говором" или просто? Если как они, то как научились? | 
|   |   | 
|  17.11.2014, 16:48 | #1020 | 
| Platinum Member Регистрация: 14.09.2012 Адрес: там, где ходят поезда и летают самолеты 
					Сообщений: 4,018
				 |   
			
			Все наши радости просто ничто на фоне таких вещей: когда люди радуются, что им, наконец, дали воду, электричество. Дай нам всем пореже оказываться в таких ситуациях, когда такие простые вещи вызывают радость. Я тоже очень и очень надеюсь, что больше перебоев не будет.
		 | 
|   |   |