2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 31, 32, 33, 34, 35, 36, 37 ... 54  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2022, 21:32 
Заслуженный участник


20/08/14
11785
Россия, Москва
gris в сообщении #1569036 писал(а):
как переводить вектор из цифр в число?
Код:
? fromdigits([1,2,3,9,7])
12397

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


05/09/16
12068
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 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Спасибо! А мне уже пора rtfm :oops: все 34 страницы этой темы :!:

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


05/09/16
12068
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 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Я там читал кусочками Programming in GP: control statements и сегодня Combinatorics в html версии. Там можно увеличивать размер текста без растягивания страницы, как в pdf.

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


05/09/16
12068
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 


05/09/16
12068
Правильно (редактирование закрылось... ненавижу эту фичу на 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 


05/09/16
12068
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 
Заслуженный участник


20/08/14
11785
Россия, Москва
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 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Как открыть некую картинку и попиксельно её заполнять? не нашёл мануала :-(

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


05/09/16
12068
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 
Аватара пользователя


07/01/16
1612
Аязьма
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 
Заслуженный участник


20/08/14
11785
Россия, Москва
waxtep
В зависимости от задачи может быть удобнее как fordiv, так и for/foreach после factor по списку разложения - вдруг числа большие и/или делителей у них очень много, тогда fordiv загрузится разложением и никак его не прервёшь и не оценишь потребное время, а factor можно или ограничить, или по результату решить стоит ли что-то перебирать и сколько (можно даже и fordiv после оценки запустить если он удобнее, если включено сохранение больших простых factor_add_primes).

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


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

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


13/08/08
14495
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}$$
Но ведь это грешно длинные тексты вставлять. Я точки уберу и просто картинку вставлю :-)
ВотЪ:
Изображение

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 810 ]  На страницу Пред.  1 ... 31, 32, 33, 34, 35, 36, 37 ... 54  След.

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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