2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 54  След.

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


16/08/05
1153
Думается перевод бессмыслен, т.к. большая часть в refcard интуитивно понятна. То же "ни бум бум" в английском, но если интересно, то оно не мешает искать и находить. Да, когда не знаешь как мог бы называться нужный оператор, то возникают некоторые трудности. Но в таких случаях можно спросить или искать в полной документации (users.pdf) по ассоциациям.

(Оффтоп)

Если уж мечтать, то про users.pdf и libpari.pdf

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


16/03/17
1
Здравствуйте, подскажите как в PARI найти все взаимно простые числа (k,n): k<n?
Спасибо.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение16.03.2017, 17:39 
Заслуженный участник


20/08/14
11798
Россия, Москва
Ну напрашивается прямое решение - перебором:
Код:
for(k=2,n-1, if(gcd(k,n)==1, print(k)))
Если надо и $n$ в каком-то диапазоне, то плюс внешний цикл по $n$.

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


11/01/06
5702
President в сообщении #1200929 писал(а):
Здравствуйте, подскажите как в PARI найти все взаимно простые числа (k,n): k<n?

Как вектор их можно получить конструкцией:
Код:
select( x->gcd(x,n)==1, vector(n-1,k,k) )

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


16/08/05
1153
Краткий туториал по эллиптическим кривым. В версии 2.10 появится вычисление рациональных точек: ellratpoints.

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


16/08/05
1153
В pari/gp нет функции деления рациональных точек эллиптических кривых. В magma такая функция есть: DivisionPoints(P,n).

Попробовал запрограммировать деления рациональной точки на 2 для кривых в форме [0,b,0,c,d]:

Код:
elldiv2(E, P)=
{
local(b, c, x1, y1, x2, y2, d, f, p, t);
b= E[2]; c= E[4]; x2= P[1]; y2= P[2]; d= [];
kill(x1); kill(y1);
f= factor((c-x1^2+2*x1*x2+2*x2*(b+x2))^2-4*(b+2*x1+x2)*y2^2);
for(i= 1, #f~,
  p= f[i,][1];
  if(#p==2,
   x1= -polcoeff(p, 0)/polcoeff(p, 1);
   y1= ellordinate(E, x1);
   for(j= 1, #y1, d= concat(d, [[x1, y1[j]]]));
  )
);
t= []; for(i= 1, #d, if(ellmul(E, d[i], 2)==P, t= concat(t, [d[i]])));
return(t)
};


Можно ли сделать этот код быстрее? Или может где есть готовый код деления рациональной точки на произвольное натуральное число?

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


11/01/06
5702
dmd, некоторые улучшения:
local(...) --> my(...)
p= f[i,][1]; --> p=f[i,1];
#p==2 --> poldegree(p)==1
for(j= 1, #y1, d= concat(d, [[x1, y1[j]]])); --> d=concat(d,apply(z->[x1,z],y1));
t= []; for(i= 1, #d, if(ellmul(E, d[i], 2)==P, t= concat(t, [d[i]]))); --> t=select(z->ellmul(E, z, 2)==P,d);

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


16/08/05
1153
Подскажите, как получить весь набор дивизоров из вектора частичной факторизации:
v=factor(x,lim)

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


11/01/06
5702
dmd, например:
divisors(factorback(v))

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


16/08/05
1153
Видимо не правильно выразился. Я имел ввиду не весь набор дивизоров числа x, а дивизоров, составленных из факторов вектора v. Т.е. как-то обойти подвисание divisors на больших трудно-факторизуемых x.

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


11/01/06
5702
dmd, тогда так:
forvec(e=vector(#v~,i,[0,v[i,2]]), print( prod(i=1,#e,v[i,1]^e[i]) ); );
или так
forvec(e=apply(x->[0,x],v[,2]), print( prod(i=1,#e,v[i,1]^e[i]) ); );

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


16/08/05
1153
maxal Спасибо!



О решении уравнений Пелля.

Ищем минимальное решение уравнения $x^2-1=Dy^2$

default(realprecision,1000)

pell()=
{
D= 991;
c= contfrac(sqrt(D));
for(i=1, #c,
b= contfracpnqn(vecextract(c, 2^i-1))[,1]~;
x= b[1];
if(issquare((x^2-1)*D), print(b); break())
)
};


Ответ:
[379516400906811930638014896080, 12055735790331359447442538767]


Это правильная реализация? Эффективнее в расчете на скорость, когда множество D перебираем, можно сделать?

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


11/01/06
5702
dmd в сообщении #1283445 писал(а):
Ответ:
[379516400906811930638014896080, 12055735790331359447442538767]


Это правильная реализация? Эффективнее в расчете на скорость, когда множество D перебираем, можно сделать?

Так быстрее и проще:
Код:
? bnfinit(x^2-991).fu
%1 = [Mod(12055735790331359447442538767*x - 379516400906811930638014896080, x^2 - 991)]

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


16/08/05
1153
maxal, ещё раз огромадное Спасибо!


В последовательности A145212 приведён код pari/gp построения первых девяти абсцисс решений уравнения $(x+1)^3 - x^3 = 67y^2$:

Vec(x*(146+515095*x-147*x^2)/((1-x)*(1-1030190*x+x^2)) + O(x^10))

Для построения нужны два числа: 146 - минимальная натуральная абсцисса уравнения $(x+1)^3 - x^3 = 67y^2$, и 515095 - минимальная натуральная абсцисса уравнения $x^2 - 1 = 3\cdot 67y^2$

Подскажите, если в курсе, как построить подобные векторы первых нескольких иксов для уравнений $1\pm x+x^2=Dy^2$ (сам не смог разобраться).

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


11/01/06
5702
dmd в сообщении #1283738 писал(а):
Подскажите, если в курсе, как построить подобные векторы первых нескольких иксов для уравнений $1\pm x+x^2=Dy^2$ (сам не смог разобраться).

Переписываете уравнение в виде обобщенного Пелля-Ферма $(2x\pm 1)^2 - 4Dy^2 = -3$ и вычисляете (на примере то го же $D=3\cdot 67$):
Код:
? b = bnfinit(x^2-4*3*67); bnfisintnorm(b,-3)
%1 = [-31*x + 879]

Здесь $879$ - это величина $2x\pm 1$ для искомого $x$.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 810 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16, 17 ... 54  След.

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



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

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


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

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