2014 dxdy logo

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

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




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

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


13/02/17

317
Varanasi
Код:
for(n=2,100, if(vecmax(factor(n)[ ,2])!=1, print(n,":",0), if((matsize(factor(n))[1])%2==0, print(n,":",-1), print(n,":",1))))


Ну вот, ещё один вариант функции moebius, с использованием Ваших рекомендаций, Dmitriy40, только почему-то работает лишь для n>1.

-- 24.02.2017, 23:36 --

Подскажите пожалуйста ещё, как лучше структуризовать текст и вообще, нужно ли это делать при написании кода, а также я что-то где-то слышал про фигурные скобки, но не понял в каких случаях их необходимо расставлять?

Также не услышал, можно ли копировать как-то куски кода из консоли в буфер и вставлять их? И что делать если количество результатов более 300, печатать их в текстовый файл для просмотра или можно как-то увеличить прокрутку?

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

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


20/08/14
11988
Россия, Москва
Aether
Для единицы нет разложения на простые сомножители, factor(1) выдаёт пустую матрицу, потому и не работает. Ну так ведь и не должно.
Я бы не вызывал дважды factor(n), а сохранил его в матрицу и потом обращался к ней (на работу не влияет).

Фигурные скобки позволяют не записывать всю программу в одну строку, а разбить на несколько. На выполнение все строки запустятся лишь когда закроется фигурная скобка. Может и ещё где применяются.

Как именно оформлять код - да по обычным правилам. Ну там пробелы, отступы для вложенных конструкций, комментарии. Всё как и везде в языках высокого уровня. Конкретно PARI/GP вроде бы никаких особых требований или ограничений не накладывает.

Копирование и вставка в/из буфера делаются средствами ОС (через системное меню окна). Размер окна консоли регулируется также системой (в свойствах окна). К PARI/GP не относится.

Сохранение в файл можно вместо записи в лог попробовать делать командами write/write1 - но ни разу не пробовал. В начале этой темы говорилось что лучше и проще пользоваться логгированием вывода на экран.

Запросить число (или вектор или ещё чего) из входного потока (клавиатуры) можно так: x=input(). Из файла прочитать данные можно функциями read* (их несколько).

Сохранить код кроме как в логе не знаю как, но можно в любой момент запустить выполнение программы из внешнего файла командой \r файл (есть в справке по команде ?\). Можно запустить и сразу при старте указав имя файла в коммандной строке. Т.е. можно пользоваться любым редактором текста для написания программ и запускать их на исполнение в PARI/GP. Дальше думаю всё понятно.

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


20/08/14
11988
Россия, Москва
Aether
Для проверки наличия лишь первых степеней в разложении есть специальная функция issquarefree(n).

PS. Вообще много информации можно подчерпнуть даже из 4-х страничной GP Reference Card с родного сайта. Не говоря уж о полной доке.

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


13/02/17

317
Varanasi

(Оффтоп)

Dmitriy40 в сообщении #1195199 писал(а):
Вообще много информации можно подчерпнуть даже из 4-х страничной GP Reference Card с родного сайта
. Не говоря уж о полной доке.



С моим корявым английским, который я не учил ни в школе, ни в ВУЗе это представляет определенные трудности, приходится постоянно домысливать, набирать перевод в гугле, который переводит математический текст не особо лучше меня. Вот если бы была такая дока на русском, хотя бы refcard, было бы конечно существенно проще.


Еще раз спасибо за помощь.

-- 25.02.2017, 01:34 --

Dmitriy40 в сообщении #1195199 писал(а):
Для проверки наличия лишь первых степеней в разложении есть специальная функция issquarefree(n).


Даже не жалею, что не узнал об этом раньше. Хотя рад, что узнал теперь, после того как реализовал програму без неё.

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


13/02/17

317
Varanasi
Столкнулся с вопросом, можно ли как-то просуммировать строку или столбец матрицы если она(матрица) не задана явно, например является результатом факторизации числа? Или придется сначала определять размер матрицы, чтобы организовать цикл суммирования?

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


20/08/14
11988
Россия, Москва
Aether
А чем не подходит выражение типа s=vecsum(factor(x)[,1]) или m=factor(x); s=vecsum(m[,1])? Вот когда понадобится что-то сложнее суммирования или произведения, вот тогда придётся писать свой цикл.

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


13/02/17

317
Varanasi
Dmitriy40, очень даже подходит, спасибо, всё получилось.

Код:
for(n=1,100, if(issquarefree(n)==0, if(vecsum(factor(n)[,2]%2==0, print(n,":",-1), print(n,":",1)),  print(n,":",0)))


Эта программка числам натурального ряда, факторизация которых свободна от квадратов и высших степеней, присваивает 0. Числам же, факторизация которых содержит высшие степени, присваивает -1 или +1 в зависимости от того, четна или нечетна сумма показателей степени в факторизации числа. Т.е. это своеобразный аналог функции Мёбиуса, только -1 и 1 определены в той области где у функции Мёбиуса определен 0, а 0 определен в той области, где у функции Мёбиуса определены -1 и 1.

Всё с PARI/GP хорошо, только нет возможности узнавать о функциях, т.к. их описание на английском. Надеюсь найдутся добровольцы, которые смогут грамотно перевести хотябы 4 странички refcard, думаю тогда существенно больше людей смогли бы оценить полезность этого калькулятора. И еще один недостаток - постоянно путаюсь со скобками, необходим какой-то алгоритм, чтобы их считать и расставлять правильно, но может это приходит с опытом. В общем оба недостатка языка заключаются во мне )

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


11/06/12
10390
стихия.вздох.мюсли
Aether в сообщении #1195674 писал(а):
постоянно путаюсь со скобками, необходим какой-то алгоритм, чтобы их считать и расставлять правильно, но может это приходит с опытом.
Приходит. А пока не пришло, можно записывать программы не навалом в одну строку, а с переносом строк, визуально выделяя подуровни (если в PARI/GP так можно; я, простите, ни в зуб ногой). И ещё маленький секрет: поставили открывающую скобку — немедленно ставьте закрывающую.

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


13/02/17

317
Varanasi
Aritaborian в сообщении #1195680 писал(а):
И ещё маленький секрет: поставили открывающую скобку — немедленно ставьте закрывающую.


Спасибо за совет, попробую.

-- 27.02.2017, 01:50 --

(Оффтоп)

Кстати, поиграл с функцией Мертенса для этой самой функции анти Мёбиуса на интервале до 100000, похоже для неё существует аналогичное гипотезе Римана соотношение: $M`(n)=O(n^{0,5+\varepsilon})$. Без этого калькулятора о таких наблюдениях не могло бы быть и речи, а так- всё заняло полторы строки кода и несколько минут времени.

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


20/08/14
11988
Россия, Москва
Aether
Снова повторю, не нужно результат логических выражений проверять на ноль или единицу. Вместо единицы писать просто функцию, вместо нуля или переставить операторы в ветвях then и else местами - вместо if(a()==0,b,c) писать if(a(),c,b) или if(a(),,b) если "с" не нужно - или взять отрицание функции операцией ! - т.е. условие if(!issquarefree(),...).
Кроме того, наверняка выгоднее выполнить один раз факторизацию, а потом уж работать с матрицей делителей, чем выполнять факторизацию дважды, в issquarefree и в factor.

Aritaborian в сообщении #1195680 писал(а):
можно записывать программы не навалом в одну строку, а с переносом строк, визуально выделяя подуровни (если в PARI/GP так можно; я, простите, ни в зуб ногой).
Можно, обрамить весь текст скобками {} и всё.

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


13/02/17

317
Varanasi
Dmitriy40, ещё раз спасибо за Ваши правильные замечания.

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


11/01/06
5710
Aether в сообщении #1195674 писал(а):
Код:
for(n=1,100, if(issquarefree(n)==0, if(vecsum(factor(n)[,2]%2==0, print(n,":",-1), print(n,":",1)),  print(n,":",0)))

Функция vecsum(factor(n)[,2]) имеет своё собственное имя: bigomega(n).
Ну а минус-плюс единицу в зависимости от чётности можно получить как (-1)^(bigomega(n)+1).

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


20/08/14
11988
Россия, Москва

(Оффтоп)

maxal в сообщении #1196042 писал(а):
Функция vecsum(factor(n)[,2]) имеет своё собственное имя: bigomega(n).
Aether, вот поэтому я и не возмусь за перевод даже refcard - уровня мат.подготовки не хватит.

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


16/08/05
1154
У меня с функцией valuation такой казус приключился. Я рискнул добавить последовательность производную от простых экспонет Вагстафа A000978.

Описание было такое:
"a(n) is the positive integer x such that 3^((W-1)/(2*p)) == +-2^x (mod W), where p > 3 is prime, W=(2^p+1)/3 is the n-th Wagstaff prime and x < p."

Её одобрили и опубликовали. Но через несколько дней я нашёл в ней ошибку, расстроился и попросил админов удалить последовательность, они удалили.

Последовательность была такая:
Код:
3, 4, 1, 5, 15, 11, 11, 4, 36, 57, 44, 66, 5, 103, 150, 145, 287, 267, 329, 476, 2363, 2915, 156, 3641, 8305, 2689, 10266, 7662


Ошибка была в третьем члене, должно быть 0 вместо 1. На этом члене степень двойки вырождается в единицу.

Сейчас ничего лучше такого исправленного кода придумать не могу
Код:
wgs()=
{
A000978=[3, 5, 7, 11, 13, 17, 19, 23, 31, 43, 61, 79, 101, 127, 167, 191, 199, 313, 347, 701, 1709, 2617, 3539, 5807, 10501, 10691, 11279, 12391, 14479, 42737, 83339, 95369, 117239, 127031, 138937, 141079, 267017, 269987, 374321, 986191, 4031399];

for(n=2, #A000978,
p= A000978[n];
W=(2^p+1)/3;
s= (W-1)/2/p;
T= Mod(3, W)^s;
if(T==1,
  print1(0, ", ")
,
  x= valuation(lift(T), 2);
  if(x, print1(x, ", "), x= valuation(lift(-T), 2); print1(x, ", "))
)
)
};


Возможно ли проще сделать код? И добавляют ли такие последовательности с одним диссонирующим членом?

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


13/02/17

317
Varanasi
maxal в сообщении #1196042 писал(а):
Функция vecsum(factor(n)[,2]) имеет своё собственное имя: bigomega(n).


Уважаемый maxal, спасибо за Ваши ценные замечания, но хотелось бы заметить, что PARI/GP не будет доступен для русскоговорящей аудитории во всей своей полноте, пока не появится качественный перевод хотябы refcard. Вы даёте разрозненное описание функций в многостраничной теме и, чтобы найти необходимую, придется перелопатить всю тему. Думаю такая перспектива мало кого из новичков, плохо владеющих английским, вдохновит на изучение PARI/GP.

Не сочтите за наглость, но Вы представляетесь самым подходящим, даже идеальным кандидатом на перевод четырех страничек очень мелкого шрифта refcard, а возможно и более масштабного труда- например написания первого и единственного русскоязычного учебника по PARI/GP )

-- 01.03.2017, 01:34 --

Dmitriy40 в сообщении #1196055 писал(а):
maxal в сообщении #1196042 писал(а):
Функция vecsum(factor(n)[,2]) имеет своё собственное имя: bigomega(n).
Aether, вот поэтому я и не возмусь за перевод даже refcard - уровня мат.подготовки не хватит.


Это при том, что Вы очень даже неплохо владеете программированием на этом языке и по всей видимости владеете английским, что уж тогда говорить о таких как я, которые столкнулись с ним впервые и в английском почти ни бум бум.

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

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



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

Сейчас этот форум просматривают: Google [Bot]


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

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