2014 dxdy logo

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

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




На страницу Пред.  1 ... 31, 32, 33, 34, 35, 36, 37 ... 55  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 21:32 
gris в сообщении #1569036 писал(а):
как переводить вектор из цифр в число?
Код:
? fromdigits([1,2,3,9,7])
12397

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 21:36 
gris в сообщении #1569036 писал(а):
А как быстро записывать скалярное произведение векторов

? v1=[1,2,3];v2=[4,5,6];p=v1*v2~;print(p)
32


-- 05.11.2022, 21:37 --

gris в сообщении #1569036 писал(а):
Где критичен регистр букв?

Везде :)

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 21:53 
Аватара пользователя
Спасибо! А мне уже пора rtfm :oops: все 34 страницы этой темы :!:

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 22:06 
gris в сообщении #1569043 писал(а):
А мне уже пора rtfm :oops: все 34 страницы этой темы :!:

Ну или юзергайд. Он вполне себе нормальный.
https://pari.math.u-bordeaux.fr/pub/par ... /users.pdf
Начать можно с небольшого вводного/обзорного описания, https://pari.math.u-bordeaux.fr/pub/par ... torial.pdf
Да, и не стесняйтесь пользоваться встроенным справочником. Знак вопроса введите :)

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 22:20 
Аватара пользователя
Я там читал кусочками Programming in GP: control statements и сегодня Combinatorics в html версии. Там можно увеличивать размер текста без растягивания страницы, как в pdf.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 22:29 
gris
Да, html версии хорошие там.
Есть ещё пара мест где почерпнуть идеи.
Вот тут https://rosettacode.org/wiki/Category:S ... mming_Task почти всё имеет вариант на PARI/GP
Ну и OEIS -- там тоже почти каждая последовательность имеет генератор на PARI/GP

-- 05.11.2022, 23:01 --

gris в сообщении #1569036 писал(а):
Насчёт (псевдо)случайности потока перестановок задумался.

Как я понимаю, это алгоритм Саттоло https://ru.m.wikipedia.org/wiki/%D0%A2% ... 0%BB%D0%BE
Он гарантирует вам беспорядок если на входе был полный порядок, но в результате всегда получается один цикл длиной $n$. Ну если я правильно понял.
Вот вам, на всякий случай, генератор случайного беспорядка длиной n

(Оффтоп)

{random_derangement(n)=my(v=Vecsmall(vector(n)));
until(a,v=numtoperm(n,random(n!));a=1;for(i=1,n,if(v[i]==i;a=0;break)));
return(v)}

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 23:32 
Правильно (редактирование закрылось... ненавижу эту фичу на dxdy):
{random_derangement(n)=my(v=Vecsmall(vector(n)));
until(a,v=numtoperm(n,random(n!));a=1;for(i=1,n,if(v[i]==i,a=0;break)));
return(v)}


-- 05.11.2022, 23:45 --

wrest в сообщении #1569053 писал(а):
Он гарантирует вам беспорядок если на входе был полный порядок, но в результате всегда получается один цикл длиной $n$. Ну если я правильно понял.

То есть скажем перестановку [2,1,4,3] ваш код не сгенерирует никогда.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение06.11.2022, 00:53 
wrest в сообщении #1569060 писал(а):
{random_derangement(n)=my(v=Vecsmall(vector(n)));
until(a,v=numtoperm(n,random(n!));a=1;for(i=1,n,if(v[i]==i,a=0;break)));
return(v)}

Поясню тут один тонкий момент, в образовательных целях.
Объявление my(v=Vecsmall(vector(n))); нужно для того, чтобы функция не меняла переменную v за пределами функции. Лучше конечно объявить и a тоже, то есть так:
{random_derangement(n)=my(a=0,v=Vecsmall(vector(n)));
until(a,v=numtoperm(n,random(n!));a=1;for(i=1,n,if(v[i]==i,a=0;break)));
return(v)}

Итераторы циклов (i в нашем случае) по умолчанию являются локальными для цикла, их объявлять смысла нет.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение13.11.2022, 20:32 
waxtep в сообщении #1569843 писал(а):
написал аккуратную программку, обрабатывающую несвободные от квадратов и четные числа отдельно. Она конечно для огромных $m$ не годится, использует факторизацию для детектирования этих случаев
Код:
? ?issquarefree
issquarefree(x): true(1) if x is squarefree, false(0) if not.

? 123%2==0
0
Т.е. и то и другое можно проверить без полной факторизации.

Оно даже чуточку побыстрее:
Код:
? forstep(x=1,1e8,2,factor(x));
time = 1min, 18,782 ms.
? forstep(x=1,1e8,2,issquarefree(x));
time = 1min, 9,139 ms.
Если же нужна и факторизация тоже (например для исключения простого в степени), то установив параметр default(factor_add_primes,1); можно сохранить все большие (больше $2^{24}$) найденные простые и они будут автоматически проверяться при вызове любой функции про факторизацию. Очистить список больших простых можно командой removeprimes(addprimes());.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 14:04 
Аватара пользователя
Как открыть некую картинку и попиксельно её заполнять? не нашёл мануала :-(

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 14:15 
gris в сообщении #1570927 писал(а):
Как открыть некую картинку и попиксельно её заполнять? не нашёл мануала

Это может существенно зависеть от окружения (операционная система, доступные библиотеки).
Есть группа функций https://pari.math.u-bordeaux.fr/dochtml ... tions.html но мне кажется pari/gp это не тот инструмент, что вам нужен для заполнения картинки пикселями...
Тут наверное нужно что-то типа python с numpy https://numpy.org и каким-то интерфейсом к картинкам, типа opencv https://opencv.org/releases/ или matplotlib https://matplotlib.org

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 14:31 
Аватара пользователя
Dmitriy40 в сообщении #1569938 писал(а):
Код:

? ?issquarefree
issquarefree(x): true(1) if x is squarefree, false(0) if not.

? 123%2==0
0
Т.е. и то и другое можно проверить без полной факторизации.
Ой, я это сообщение как-то пропустил, спасибо. На самом деле я там ещё колхозил построение делителей числа, для чего и понадобилась факторизация, но потом вспомнил про оператор fordiv ( у которого, конечно, тоже факторизация под капотом, но хотя бы от нужды колхозить он избавляет) :-)

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 16:07 
waxtep
В зависимости от задачи может быть удобнее как fordiv, так и for/foreach после factor по списку разложения - вдруг числа большие и/или делителей у них очень много, тогда fordiv загрузится разложением и никак его не прервёшь и не оценишь потребное время, а factor можно или ограничить, или по результату решить стоит ли что-то перебирать и сколько (можно даже и fordiv после оценки запустить если он удобнее, если включено сохранение больших простых factor_add_primes).

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 16:42 
Аватара пользователя
Dmitriy40 в сообщении #1570961 писал(а):
тогда fordiv загрузится разложением и никак его не прервёшь и не оценишь потребное время
Вот-вот, у меня на самом деле первая мысль "наколхозить" возникла именно из-за инстинктивного страха, вызываемого продвинутыми аналогами обычного for. Там в любом случае не кандидат на промышленный алгоритм, а кусочек кода посмотреть-пощупать известное решение, полученное при условии успешной факторизации числа

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение22.11.2022, 16:43 
Аватара пользователя
wrest, я было полез делать скриптом для флэшь, но всё позабыл и даже в синтаксисе путался. Сделал в PARI кусок для LaTeX:
{for(n=1,132,
for (m=1,132, if(issquare(n*m),
print("\\put(",3*n,",",3*m,"){\\circle*{2}}"))))}

$$\begin{picture}(64,64)
\put(0,0){\line(1,0){64}}
\put(0,0){\line(0,1){64}}
\put(64,64){\line(-1,0){64}}
\put(64,64){\line(0,-1){64}}
\put(57,57){\circle*{2}}
\put(60,15){\circle*{2}}
\put(60,60){\circle*{2}}
\end{picture}$$
Но ведь это грешно длинные тексты вставлять. Я точки уберу и просто картинку вставлю :-)
ВотЪ:
Изображение

 
 
 [ Сообщений: 824 ]  На страницу Пред.  1 ... 31, 32, 33, 34, 35, 36, 37 ... 55  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group