2014 dxdy logo

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

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




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

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


13/02/17

317
Varanasi
arseniiv в сообщении #1194168 писал(а):
а сейчас доступна уже 2.9.1.


4.9.1 Вы хотели сказать?

isok и ismn - это определяемые функции или переменные видимо, потому, что их нет в Help. n- наверное тоже функция или переменная.

Код:
ispower(x,{k},{&n})
рассматривает выражение $x=n^k$но что куда возвращает -непонял.

Непонятно, что обозначает ++ и ||, и вообще, как эти || набрать в коде?

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


20/08/14
11867
Россия, Москва
Справка по ispower:
PARI/GP писал(а):
?ispower
ispower(x,{k},{&n}): if k > 0 is given, return true (1) if x is a k-th power, false (0) if not. If k is omitted, return the maximal k >= 2 such that x = n^k is a perfect power, or 0 if no such k exist. If n is present, and the function returns a non-zero result, set n to the k-th root of x.
Т.е. проверяет является ли первый аргумент точной степенью числа и пишет это число в третий аргумент. Возвращает флаг точная ли степень или сам максимальный показатель степени. Удобна для проверки извлекается ли корень k-ой степени из числа или поиска корень какой максимальной степени можно извлечь.

Aether в сообщении #1194191 писал(а):
Непонятно, что обозначает ++ и ||, и вообще, как эти || набрать в коде?
++ это очевидно инкремент, || не менее очевидно логическое ИЛИ (не битовое, логическое), && логическое И. Обычная С-шная нотация. Набирать в коде именно так, символами плюс и вертикальной черты (обычно справа от плюса в верхнем ряду клавиш, нажимать вместе с shift-ом).

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


13/02/17

317
Varanasi
Aether в сообщении #1194135 писал(а):
Код:
ismn(n) = n++; n == 2^valuation(n, 2);
isok(n) = ismn(n) || (ispower(n, , &m) && ismn(m));



Что же получается в итоге? Dmitriy40, не могли бы Вы прокомментировать весь код?

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


27/04/09
28128
Aether в сообщении #1194191 писал(а):
4.9.1 Вы хотели сказать?
Нет, на http://pari.math.u-bordeaux.fr/download.html последней стабильной версией указана 2.9.1.

Aether в сообщении #1194191 писал(а):
isok и ismn - это определяемые функции или переменные
Это стопроцентно, разумеется. :-)

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


20/08/14
11867
Россия, Москва
Aether
А Вы не могли бы привести ссылку на последовательность в OEIS? Что-то гугл не находит.
Код же, функция ismn(n) выдаёт истину если число n - число Мерсенна (непонятно зачем здесь valuation если ispower была бы удобнее и быстрее); функция isok(n) выдаёт истину если n - число Мерсенна или является степенью числа, которое само число Мерсенна.

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


11/01/06
5710
Dmitriy40, насколько я понимаю, valuation работает гораздо быстрее ispower (которому ещё нужно определить основание степени).
Если точнее, то valuation(n) может потребовать до $O(\log n)$ обычных делений, а ispower(n) столько же извлечений целочисленных корней различных степеней (это если в обход факторизации аргумента, которая бы потребовала ещё больше времени).

-- Tue Feb 21, 2017 08:57:49 --

Кстати, код для isok() неявно использует тот факт, что числа Мерсенна сами не могут являтся нетривиальными степенями (что следует, например, из ныне доказанной гипотезы Каталана). Если бы это было не так, и $m$ являлось бы числом Мерсенна и нетривиальной степенью, то isok() неправильно бы работал на степенях $m$.

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


20/08/14
11867
Россия, Москва
maxal
Спасибо! Я почему-то подумал наоборот, наверное забыл что ispower не знает показателя и потому недостаточно просто извлечь корень заданной степени.

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


13/02/17

317
Varanasi

(Оффтоп)

Dmitriy40 в сообщении #1194380 писал(а):
Aether
А Вы не могли бы привести ссылку на последовательность в OEIS? Что-то гугл не находит.


Последователность A282534 пока находится на рассмотрении, но в "history" можно посмотреть представленный код.

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


13/02/17

317
Varanasi
Подскажите пожалуйста, как организовать цикл? например мне необходимо перемножить каждое значение переменной n, в пределах 1-10 на каждое значение переменной m, в пределах 1-5. И вывести всё это на печать.

Нужно как-то использовать 2 раза оператор for?

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


20/08/14
11867
Россия, Москва
Aether
for(n=1,10, for(m=1,5, x=n*m; print(x)))

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


13/02/17

317
Varanasi
Dmitriy40 в сообщении #1194432 писал(а):
Aether
for(n=1,10, for(m=1,5, x=n*m; print(x)))


Спасибо, наверное можно то же самое сделать определив 2 вектора, а затем перемножив их?

-- 21.02.2017, 22:07 --

Круто, написал первую программулину на этом языке, которая выводит делители числа для чисел от 1 до 1000. Всё поместилось меньше чем в одну строку, я в восторге:
Код:
for(n=1,1000, print("divisors(", n, ")=", divisors(n), ";"))


Вопросы: Как подняться в верхнюю часть экрана чтобы посмотреть выведенный результат с начала и вообще, есть ли какая-то навигация? Есть ли в приложении возможность как-то выделять, копировать, вставлять текст, кроме стрелок вверх вниз?

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


13/02/17

317
Varanasi
И можно ли как-то загонять результаты в текстовый файл?

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


13/02/17

317
Varanasi
Извиняюсь, про запись в текстовый файл прозевал, было на второй странице темы - разобрался. А есть ли в этом языке что-то типа паскалевского if? Например я пишу следующий код:
Код:
for(n=1,100, n == 2^valuation(n,2); print(n, ","))
но вот перед сравнением мне необходимо добавить что-то типа if, т.е. как-то обозначить, что это условие, по которому должна осуществляться печать. Т.е. печататься должно не всё подряд, а только значения, удовлетворяющие условию. Как это организовать?

Заранее благодарю.

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


20/08/14
11867
Россия, Москва
Aether в сообщении #1194471 писал(а):
Т.е. печататься должно не всё подряд, а только значения, удовлетворяющие условию. Как это организовать?
Пример: for(n=1,100, if(n>95, print1(n, ",")))
Ещё пример: for(n=1,10, print1(n); if(isprime(n), print1(" is "), print1(" is not ")); print("prime."))

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


27/06/08
4063
Волгоград
Aether в сообщении #1194444 писал(а):
И можно ли как-то загонять результаты в текстовый файл?
Я вывожу то, что меня интересует, на экран, а в начале ставлю команду типа
Код:
\l e:\math\projests\PARI\res\res104_6
т.е. \l и путь.

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

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



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

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


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

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