2014 dxdy logo

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

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




На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 55  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.02.2017, 21:20 
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 
Справка по 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 
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 
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 
Aether
А Вы не могли бы привести ссылку на последовательность в OEIS? Что-то гугл не находит.
Код же, функция ismn(n) выдаёт истину если число n - число Мерсенна (непонятно зачем здесь valuation если ispower была бы удобнее и быстрее); функция isok(n) выдаёт истину если n - число Мерсенна или является степенью числа, которое само число Мерсенна.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.02.2017, 16:48 
Аватара пользователя
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 
maxal
Спасибо! Я почему-то подумал наоборот, наверное забыл что ispower не знает показателя и потому недостаточно просто извлечь корень заданной степени.

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

(Оффтоп)

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


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

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.02.2017, 19:53 
Подскажите пожалуйста, как организовать цикл? например мне необходимо перемножить каждое значение переменной n, в пределах 1-10 на каждое значение переменной m, в пределах 1-5. И вывести всё это на печать.

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

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.02.2017, 20:05 
Aether
for(n=1,10, for(m=1,5, x=n*m; print(x)))

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.02.2017, 20:08 
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 
И можно ли как-то загонять результаты в текстовый файл?

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

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

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.02.2017, 23:39 
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 
Aether в сообщении #1194444 писал(а):
И можно ли как-то загонять результаты в текстовый файл?
Я вывожу то, что меня интересует, на экран, а в начале ставлю команду типа
Код:
\l e:\math\projests\PARI\res\res104_6
т.е. \l и путь.

 
 
 [ Сообщений: 824 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 55  След.


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