2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Итальянка
Сообщение05.10.2023, 21:56 


05/09/16
11588
lel0lel в сообщении #1612606 писал(а):
в котором каждый бит это три умножения. Его можно переписать, что умножений будет два ( меньше для рекурсий второго порядка не получить)

Там ведь даже не умножения, а возведения в квадрат, а это должно быть быстрее чем просто умножение.
lel0lel в сообщении #1612606 писал(а):
Поздравляю)
Примерно в полтора раза быстрее.

Вольфрам, как я слышал, небыстрый. pari/gp тоже интерпретатор, но вот на подобные вычиcления немного лучше заточен, вот и всё.
lel0lel в сообщении #1612606 писал(а):
Очень может быть, и, кстати, похоже на правду, так как это объясняет различие в полтора раза.
Не не, в программах на pari/gp что я запускал не используется встроенная функция вычисления Фибоначчи, она такие большие числа не умеет.
Использовалось два кода, подсказанный ув. maxal, через производящую функцию, по модулю
fibomod_2(n,m)=lift(polcoef(lift(Mod(x,(x^2-x-1)*Mod(1,10^m))^n),1,x))
и возведением "производящей матрицы" в степень, тоже по модулю:
fibomod_1(n,m)=lift(((Mod([1,1;1,0],10^m))^(n-1))[1,1])

Обе берут на вход n - номер числа Фибоначчи, m - сколько последних цифр вернуть в качестве результата (ведущие нули опускаются).
С кодом fibomod_2(), использующим производящую функцию, надо быть осторожным: переменная x не должна использоваться до этого кода, или надо выполнить команду kill(x) если использовалась.

P.S. Ну а вообще, сермяжная правда конечно в том, что числа Фибоначчи (и вообще ЛРП, но Фибоначчи в особенности) и всё про них украдено задолго до нас. :mrgreen: Но сейчас вычисления такого объема , как например предложили вы (стомиллионнозначные числа по тысячезначному модулю), стало доступно на гаджетах (я пользуюсь андроид планшетом, и он по скорости примерно такой же как мой ноутбук) лёжа на диване, и позволяет легко удовлетворить праздный интерес.

 Профиль  
                  
 
 Re: Итальянка
Сообщение05.10.2023, 23:02 


20/04/10
1777
wrest в сообщении #1612618 писал(а):
lel0lel в сообщении #1612606 писал(а):
в котором каждый бит это три умножения. Его можно переписать, что умножений будет два ( меньше для рекурсий второго порядка не получить)
Там ведь даже не умножения, а возведения в квадрат, а это должно быть быстрее чем просто умножение.

Про три умножения -- это я про алгоритм, который использовался при расчёте выше мной. Он легко переписывается под два умножения, правда именно умножения, поэтому, как вы верно заметили два squaring в алгоритме gmp всё равно будут немного быстрее, скорее всего.
wrest в сообщении #1612618 писал(а):
Вольфрам, как я слышал, небыстрый. pari/gp тоже интерпретатор, но вот на подобные вычиcления немного лучше заточен, вот и всё.
Да, это влияет, но не сильно, на таких объемах основное -- это количество больших умножений, если его сделать минимальным, то ни интерпретатор, ни железо -- не главное.
wrest в сообщении #1612618 писал(а):
Не не, в программах на pari/gp что я запускал не используется встроенная функция вычисления Фибоначчи, она такие большие числа не умеет.

Это понятно, я вам отправлял код maxal, там, при вычислении $x^n \bmod Cp(x)$, используется только возведение в квадрат полиномов по полиномиальному модулю (алгоритм Fiduccia), тем не менее это почти тоже, что некоторое количество умножений по модулю. Поэтому я и сказал, что так или иначе, в pari для умножения двух линейных полиномов по модулю полинома второго порядка реализация эквивалентна двум большим умножениям. Отсюда и различие 3/2. Про другие коды сказать не берусь, так как pari не использую, но, с большой вероятностью, это те же два умножения (быть может squaring).
wrest в сообщении #1612618 писал(а):
всё про них украдено задолго до нас
Это вы зря, полно открытых проблем. Машины считают быстро, это ваша правда. Посчитаю пожалуй "пентаначчи") давно ничего не считал, так, ради интереса: $f_0=f_1=f_2=f_3=0, f_4=1, f_{k+5}=f_{k+4}+f_{k+3}+f_{k+2}+f_{k+1}+f_{k}$. Задача таже. Расчётное время полёта 2 часа 26 минут :D, но я пожалуй спать

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 01:47 


20/04/10
1777
Время в секундах, немного раньше планируемого.
Код:
In[116]:= AbsoluteTiming[AnyOrderRecurrenceModulo[{0, 0, 0, 0, 1}, {1, 1, 1, 1, 1}, 10^10000000, 10^1000]]

Out[116]= {7474.47,
297919434044441427313952240882791859235377456519957485683612326523101343187362485727950513984897408395496
758254206776045600872220478373237452374283441317226722846870348022952014396504076758453612303636532822655
484940428198255664630193251812981357182008672955588092292209205401387170080496741712116822345565753287753
952057689414845743494482987594714257798724183449405530685469958729607189120032090941391938738193571965020
989325826484390252837443091721399860062328139936172039093718733375213438541691651031355203405931173528985
527672468556878197950083643100603759034920127037472513136157172439312821183036734091812810198773052715056
796167537718276046473659449129481680288867987158434436222784729602238558415469784467770705947560236441675
070255456452649997533877319135183367080208234025796307848225760647126584074253677577392179807162815590026
358723966740095321659626251879997346875931238743224948041964358907625571889757090877956684833848932495317
91795297759953095409776391702029485
2042506005648324353}

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 08:36 


05/09/16
11588
lel0lel в сообщении #1612491 писал(а):
Давайте проведём небольшой конкурс железа: посчитаем $F_n\bmod 10^{1000}$ для $n=10^{10^7}$. У меня получилось так (не пользуясь периодичностью)

Если вспомнить про период, то время счета будет 300мс (результат не печатаю, он правильный) :mrgreen:
? fibomod_10m(n,m)=n=n%(15*10^(m-1));lift(((Mod([1,1;1,0],10^m))^(n-1))[1,1])
? fibomod_10m(10^(10^7),1000);
? ##
*** last result computed in 306 ms.
?


-- 06.10.2023, 08:52 --

lel0lel в сообщении #1612623 писал(а):
Посчитаю пожалуй "пентаначчи")

Вот универсальные ванлайнеры для обсуждаемой темы
1. Считаем n-ое k-наччи (подсмотрено в oeis про пентаначчи):
knacci(n, k)=(matrix(k, k, i, j, i==j-1||i==k)^n)[1, k]
Например 20-е пентаначчи:
? knacci(20,5)
%229 = 26784
?


2. Считаем n-ое k-наччи по модулю m
knaccimod(n,k,m)=lift(((Mod(matrix(k, k, i, j, i==j-1||i==k),m))^(n))[1,k])
Например 20-e 5-наччи по модулю 1000:
? knaccimod(20,5,10^3)
%230 = 784
?


-- 06.10.2023, 08:53 --

lel0lel в сообщении #1612633 писал(а):
Время в секундах, немного раньше планируемого.

У меня чуть меньше часа (57 минут).

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 09:41 


05/09/16
11588
Для закрытия обощенного вопроса темы хорошо бы ещё научиться вычислять период k-наччи по модулю (ЛРП же периодические все по модулю, если я правильно понимаю).

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 11:14 


05/09/16
11588
wrest в сообщении #1612650 писал(а):
Для закрытия обощенного вопроса темы хорошо бы ещё научиться вычислять период k-наччи по модулю (ЛРП же периодические все по модулю, если я правильно понимаю).

Можно даже не наименьший (главный), если это сложно, а какой-нибудь.

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 14:52 
Модератор
Аватара пользователя


11/01/06
5664
maxal в сообщении #1559683 писал(а):
Строгое изложение теории можно найти в учебнике
Глухов М. M., Елизаров В. П., Нечаев А. А. Алгебра.
См. глава 25 § 9. Вычисление периода и длины подхода ЛРП над конечным полем

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 15:01 


05/09/16
11588
maxal
Спасибо, я пас: у меня не хватает образования для этой главы этой книги.
Может, lel0lel или Doctor Boom почитают.

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 15:07 
Модератор
Аватара пользователя


11/01/06
5664
Вот здесь есть код для вычисления периода по простому модулю:
post1559671.html#p1559671

 Профиль  
                  
 
 Re: Итальянка
Сообщение06.10.2023, 15:17 


05/09/16
11588
maxal в сообщении #1612699 писал(а):
Вот здесь есть код для вычисления периода по простому модулю:

Да, я видел. Но у нас модуль не простой (пока интересовались последними цифрами десятичной записи, т.е. модулями вида $2^n\cdot 5^n$) и код, ессно, не работает...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2, 3

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Rahmonov


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group