2014 dxdy logo

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

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





Начать новую тему Ответить на тему На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  След.

А вам пакет PARI/GP интересен?
Да 85%  85%  [ 35 ]
Нет 5%  5%  [ 2 ]
Не уверен(а) 10%  10%  [ 4 ]
Всего голосов : 41
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение26.05.2016, 12:01 


20/08/14
1869
Россия, Москва
Тут опять всё зависит от длины числа в битах и от количества единичных битов. Если единичек несколько штук, то Ваш вариант возможно будет быстрее, если же единичек [может быть] много, то я бы сделал так:
Код:
? v=binary(n); len=matsize(v)[2]; for(i=1, len, if(v[i]==1, <что делать при единичках>));
Перебор всех 10 тысяч единиц в числе $2^{10000}-1$ занимает у меня около 70мс. А сто тысяч единичек в числе $2^{100000}-1$ за 270мс.

Да, если так делать, не забудьте что биты тут нумеруются параметром i со старшего и с 1, а не с 0.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение01.06.2016, 21:48 


16/08/05
661
Кстати, получить вектор индексов установленных битов можно так:
Код:
select(i -> i==1, binary(n), 1)


-- Чт июн 02, 2016 00:28:36 --

Вопрос. Как написать свою функцию (или процедуру) forbit(n, X, sec), которая была бы подобна встроенной fordiv(n, X, sec)?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение04.10.2016, 22:18 


16/08/05
661
Снова вопрос про решение уравнений по составному модулю. Допустим уравнение кубическое по модулю 9.


Mathematica показывает три правильных решения:
Код:
Reduce[2 + X*4*(3 + X*4*(3 + X*4)) == 0, {}, Modulus -> 9]
X == 1 || X == 4 || X == 7


pari/gp по простому модулю 3 показывает одно:
Код:
polrootsmod(2+X*4*(3+X*4*(3+X*4)), 3)
[Mod(1, 3)]~


Как в pari/gp получить все три решения по модулю 9?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.10.2016, 16:48 
Модератор
Аватара пользователя


11/01/06
5126
dmd в сообщении #1157351 писал(а):
Как в pari/gp получить все три решения по модулю 9?

Разве что "подъёмом" по лемме Гензеля:
Код:
? ?polhensellift
polhensellift(A, B, p, e): lift the factorization B of A modulo p to a factorization modulo p^e using Hensel lift. The factors in B must be pairwise relatively prime modulo p.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.10.2016, 18:23 


20/08/14
1869
Россия, Москва
А получится ли? Если для $\mod 9$ PARI ещё выдаёт корень $(1)$, к тому же все три корня равны по $\mod 3$, то для $\mod 27$ PARI выдаёт пустое множество корней, а WolframAlpha - три корня $(4, 13, 22)$. Получится ли лифтом из пустого множества получить корни? К сожалению не понимаю как самому проверить.

-- 05.10.2016, 18:32 --

Для $\mod 81$ и $\mod 243$ ситуация аналогична.
Кстати, в polrootsmod есть третий параметр, если его указать в 1, то для модулей 27, 81 и 243 появляется корень, но снова лишь один наименьший.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.10.2016, 18:51 
Модератор
Аватара пользователя


11/01/06
5126
Dmitriy40, polrootsmod определён только для простых модулей. Соответственно, на непростых модулях его результат неопределен, и лучше на него не полагаться.

-- Wed Oct 05, 2016 10:54:05 --

P.S. Лемма Гензеля работает только для свободных от квадратов многочленов (где производная на корнях не обращается в нуль) по простому молулю. Про сложности с кратными корнями см. в википедии.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.10.2016, 19:25 


20/08/14
1869
Россия, Москва
Ясно, спасибо, не подумал что простота принципиальна, всё, больше не мешаю.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение09.12.2016, 16:21 
Заслуженный участник
Аватара пользователя


18/12/07
671
Мне эта программа очень нравится. К сожалению, программирование моё застыло на началах Бейсика, и по сему много вопросов по PARI/GP.
Вот вопрос.
При длительных вычислениях абсолютно не ясно, то ли идти спать, или ещё потаращиться на экран в ожидании конечного результата.
В Бейсике, помню, я расставлял "вехи" при переборе переменных, к примеру -
идет идёт последовательный перебор двух переменных $x,y$. Когда меняется вторая переменная $y$ следует команда "PRINT $y$. Но каждый раз печать идёт на одно и то же место экрана. В Бейсике есть такая команда, поэтому всё время на экране меняется только одна строчка. По ней я судил где находится программа вычисления и надо ли идти спать..
Есть ли такая команда в PARI/GP?
Ест ли другие возможности контроля хода программы вычислений?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение09.12.2016, 17:54 
Модератор
Аватара пользователя


11/01/06
5126
Коровьев
Вот примерный аналог:
Код:
print1(y," ",Strchr(13));

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение10.12.2016, 00:19 
Заслуженный участник
Аватара пользователя


18/12/07
671
maxal
Большое спасибо! Всё работает.
Вот ещё у меня проблема.
Определить является ли квадратом полученное целое число довольно просто.
Код:
k=abs(x)-(sqrtint(abs(x)))^2

Если $k=0$, то $x$ есть квадрат целого числа.
Но как командно определять: являются ли квадратом рационального числа получаемые неким перебором дробные числа? Приходится изворачиваться.
И вот вопрос.
Есть ли возможность командно из дроби выделять числитель (или знаменатель)?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение10.12.2016, 01:41 
Модератор
Аватара пользователя


11/01/06
5126
Коровьев в сообщении #1175579 писал(а):
Определить является ли квадратом полученное целое число довольно просто.
Для этого есть функция issquare(). Работает как для целых, так и для рациональных чисел.

Коровьев в сообщении #1175579 писал(а):
Есть ли возможность командно из дроби выделять числитель (или знаменатель)?

numerator(), denominator()

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.02.2017, 18:35 


13/02/17
46
Вот код, который находит последовательность чисел, являющихся целыми степенями чисел Мерсенна:

Код:
ismn(n) = n++; n == 2^valuation(n, 2);
isok(n) = ismn(n) || (ispower(n, , &m) && ismn(m));


Код очень, просто удивительно короткий.

Нельзя ли подробно разобрать этот код?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.02.2017, 19:35 
Заслуженный участник
Аватара пользователя


27/04/09
18547
Уфа

(Комментарий от не знающего PARI/GP)

По поводу valuation см. https://math.mit.edu/~brubaker/PARI/PARIrefcard.pdf (что она делает) и https://en.wikipedia.org/wiki/P-adic_order (что это значит), так что ismn определяет, является ли её аргумент числом Мерсенна, и вполне прямым образом.

Вот по поводу второй функции, а особенно выражения ispower(n, , &m), уже нужно разбираться в PARI/GP.

Aether в сообщении #1194135 писал(а):
который находит последовательность чисел
Да ну, просто же проверяет, такое число или нет.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.02.2017, 20:05 


13/02/17
46
Хорошая и познавательная табличка по PARI\GP, большое спасибо. Думаю, её неплохо было бы выложить вначале темы.

В OEIS код заявлен как строящий последовательность.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.02.2017, 20:18 
Заслуженный участник
Аватара пользователя


27/04/09
18547
Уфа
Aether в сообщении #1194164 писал(а):
Хорошая и познавательная табличка по PARI\GP большое спасибо? Думаю её неплохо было бы выложить вначале темы.
Она 2003 года для версии 2.2.5. Думаю, там с тех времён уже много изменилось. В частности, я в ней не нашёл ispower. Также, maxal в первом посте темы использовал 2.4.3, а сейчас доступна уже 2.9.1.

Aether в сообщении #1194164 писал(а):
В OEIS код заявлен как строящий последовательность.
Ну, если множество разрешимо (есть вычислимая функция, определяющая, принадлежит ему элемент или нет), то оно и перечислимо (есть вычислимая функция, «перечисляющая» все его элементы — реализующая произвольную его нумерацию), потому что мы можем перебирать в цикле все натуральные числа и выдавать те из них, которые удовлетворяют предикату. Написать такую «обёртку» не представляется сложным на типичном языке программирования.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 187 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  След.

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы



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

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


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

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