2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 24, 25, 26, 27, 28, 29  След.

А вам пакет PARI/GP интересен?
Да 84%  84%  [ 54 ]
Нет 5%  5%  [ 3 ]
Не уверен(а) 11%  11%  [ 7 ]
Всего голосов : 64
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение31.03.2021, 16:03 
Заслуженный участник


20/08/14
8870
Россия, Москва
Soul Friend в сообщении #1512280 писал(а):
снизил с precprime(b^2)# на precprime(2*b+2)#
Soul Friend в сообщении #1512282 писал(а):
исключить составные с простым множителем больше $b$
... проверяя при этом до $2b+2$ (точнее меньшего простого), что вообще неправильно. Вы же простые числа в диапазоне $(b \ldots 2b)$ примите за составные, они же не дадут $\gcd()=1$ с праймориалом $(2b)\#$. Конечно вам повезло и почти всегда $a^2>2b$, но вообще говоря так делать нельзя.

Т.е. проблема в математике, не в for+gcd.

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


09/04/21

21
Здравствуйте, возникло несколько вопросов:
1. Подскажите пожалуйста, можно ли в Pari/gp вставлять как-то код из буфера(блокнота) и наоборот, сохранять введенный код в буфер(блокнот)?
2. Можно ли как-то организовать аналог паскалевского
Код:
case of
не используя
Код:
if
?
3. Есть такой вот код:
Код:
a=0;b=0;c=0;j=0; for(i=1,100,if(#factor(i)[,2]%3<1&issquarefree(i),a=a+1;print("n="i",red="a",green="b",blue="c), if(#factor(i)[,2]%3>1&issquarefree(i), b=b+1;print("n="i",red="a",green="b",blue="c), if(issquarefree(i), c=c+1;print("n="i",red="a",green="b",blue="c))));)


Он сравнивает остатки от целочисленного деления на 3 некоторого ряда чисел и в зависимости от остатков добавляет единицу к одному из счетчиков. Задача состоит в том, чтобы делать все то же самое, только при целочисленном делении этого ряда чисел на любое натуральное число которое вводится вручную. Т.е. количество сравнений может быть очень большим, также как и количество счетчиков. Поделитесь пожалуйста идеями.

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


20/08/14
8870
Россия, Москва
fosnie в сообщении #1513623 писал(а):
1. Подскажите пожалуйста, можно ли в Pari/gp вставлять как-то код из буфера(блокнота) и наоборот, сохранять введенный код в буфер(блокнот)?
Можно через системное меню, которое по клику мышкой в левом верхнем углу окна консоли (в него можно попасть и клавиатурой, Alt+Space).
Если программа не работает и ожидает ввода, то можно и по правой кнопке мышки.

fosnie в сообщении #1513623 писал(а):
2. Можно ли как-то организовать аналог паскалевского
Нет, совсем без if не получится, но здесь if имеет расширенный синтаксис и можно перечислять список условий:
Код:
if(a>b, c=a, a<b, c=b, a==b, c=0, a==0, c=1, b<1, c=99, c=-1000)
В частности можно и перечислить все варианты равенства разным константам.

fosnie в сообщении #1513623 писал(а):
любое натуральное число которое вводится вручную
Ну так есть же input, вот и вводите им числа в переменные. На натуральность придётся или проверять или преобразовывать (round, floor, ceil).

fosnie в сообщении #1513623 писал(а):
Он сравнивает остатки от целочисленного деления на 3 некоторого ряда чисел и в зависимости от остатков добавляет единицу к одному из счетчиков.
А зачем здесь множественный вызов factor?! Сделайте один раз xx=i%3 и в зависимости от значения xx меняйте свои счётчики.

fosnie в сообщении #1513623 писал(а):
Т.е. количество сравнений может быть очень большим, также как и количество счетчиков.
Организуйте счётчики в массив и меняйте их по индексу, равному остатку от деления (только не забывая что нулевой индекс недопустим). Примерно так:
Код:
cnt=vector(10^6); n=round(input()); cnt[n]++;
Понятно что что-то можно и в цикл убрать, и пояснения человеку выдать, и его ошибки проверить, и условие выхода добавить.

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


09/04/21

21
Большое спасибо. Копировать и вставлять уже получилось. Буду разбираться с кодом.

Dmitriy40 в сообщении #1513627 писал(а):
А зачем здесь множественный вызов factor?! Сделайте один раз xx=i%3 и в зависимости от значения xx меняйте свои счётчики.


#factor(i)[,2] - эта операция определяет количество факторов натурального числа, свободного от квадратов. Исследуемое множество - это как раз и есть количество факторов натуральных чисел свободных от квадратов. Если вместо делителя 3 поставить делитель 2, то получим функцию Мебиуса, только вместо определения четности-нечетности количества факторов используется остаток по модулю от деления на 2, 3, 5,7, .... и, таким образом, получается обобщение функции Мёбиуса и при делителе 2 она становится обычной функцией Мебиуса.

И еще один маленький вопросик:

Как двигаться по строкам кода, перепрыгивать в начало и конец кода? Клавишами вверх вниз не получается, а вправо влево - только посимвольно можно переместиться со строки на строку.

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


20/08/14
8870
Россия, Москва
Может быть вместо for применить forfactored или forsquarefree или fordivfactored? Количество делителей тоже можно получить отдельно, numdiv (всех вообще), omega (простых). Возможно они будут быстрее/удобнее factor. Если надо именно это (сорри, не разбирался в коде).

По строкам никак, редактор в PARI/GP однострочный.
В начало/конец строки можно перейти клавишами Home/End, во всяком случае в последних версиях PARI/GP (возможно это лишь в версии с буковками readline в имени, но там свои заморочки).
Если код не умещается в одну строку, то пишите его в обычном текстовом файле и запускайте в PARI/GP или командой \r file в самом PARI/GP, или из консоли вызовом gp64.exe file.

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


09/04/21

21
Dmitriy40 в сообщении #1513640 писал(а):
omega (простых)

да, спасибо, как раз omega именно то, что нужно.

Dmitriy40 в сообщении #1513640 писал(а):
По строкам никак, редактор в PARI/GP однострочный.

Это очень угнетает, код получается достаточно большой и если хочется что-то подправить немного, то приходится очень долго удерживать клавишу или переходить в блокнот, что очень неудобно. Перехода по строкам очень недостает.
Также заметил, что нельзя изменить ширину окна или у меня это не получается сделать. Растягивание окна не работает и оно только в пол экрана по ширине, когда числа большие и их много - они не влезают в одну строку.

input у меня так и не получилось реализовать, не понимаю почему, получается вот такой очень громоздкий код при распределении чисел свободных от квадратов на 7 видов в зависимости от остатка от целочисленного деления количества факторов этих чисел на 7.

Код:
a=0;b=0;c=0;d=0;e=0;f=0;g=0;for(i=1,1000000,
if(omega(i)%7==0&issquarefree(i), a=a+1;print("n="i",mod0="a",mod1="b",mod2="c
",mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==1&issquarefree(i), b=b+1;print("n="i",mod0="a",mod1="b",mod2="c",
mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==2&issquarefree(i), c=c+1;print("n="i",mod0="a",mod1="b",mod2="c "
,mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==3&issquarefree(i), d=d+1;print("n="i",mod0="a",mod1="b",mod2="c "
,mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==4&issquarefree(i), e=e+1;print("n="i",mod0="a",mod1="b",mod2="c "
,mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==5&issquarefree(i), f=f+1;print("n="i",mod0="a",mod1="b",mod2="c "
,mod3="d",mod4="e"mod5="f",mod6="g),
if(omega(i)%7==6&issquarefree(i), g=g+1;print("n="i",mod0="a",mod1="b",mod2="c "
,mod3="d",mod4="e"mod5="f",mod6="g))))))));)


А если мне захочется на 137 видов их распределить- это же совсем кошмар.
Forsquarefree тоже не удалось использовать, хотя, как мне кажется, он бы здесь идеально вписался.



И еще обратил внимание на такую штуку - процесс исполнения кода можно притормозить и посмотреть промежуточные результаты, нажав на ползунок "вверх-вниз" основного окна программы .

Попробую еще поэкспериментировать с inputom и forsquarefree

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


05/09/16
9454
fosnie в сообщении #1514133 писал(а):
А если мне захочется на 137 видов их распределить- это же совсем кошмар.

Ну тогда у вас букв a,b,c,d,e ... не хватит :)

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


20/08/14
8870
Россия, Москва
fosnie в сообщении #1514133 писал(а):
получается вот такой очень громоздкий код
Я же вам уже сказал
Dmitriy40 в сообщении #1513627 писал(а):
Организуйте счётчики в массив и меняйте их по индексу, равному остатку от деления (только не забывая что нулевой индекс недопустим).
Например этот ваш код свернётся в конструкцию типа
Код:
print("Введите количество счётчиков:");
cnt=vector(input());\\Нужное количество счётчиков, сразу и обнулятся
for(i=1,1000,
   if(!issquarefree(i), next);\\Такие числа пропускаем
   cnt[omega(i)%#cnt+1]++;
   print1("mod0=", cnt[1]); for(k=1,#cnt-1, print1(", mod", k, "=", cnt[k+1]); ); print;\\Печать зачем-то
);
и много буковок для переменных не понадобится.

И не надо экономить на запятых в print, без них совершенно непонятно где строковый параметр, а где переменная.

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


09/04/21

21
Спасибо, разобрался в Вашем коде, чувствуется рука мастера. Сроду не знал, что
Код:
++
- это добавление 1 к счетчику, а
Код:
!
- это отрицание функции. Единственное, чего не понял, почему нельзя внести mod0 в цикл со всеми остальными результатами? Т.е. почему не работает код:
Код:
print("Ввдедите количество цветов чисел:");
cnt=vector(input());
for (i=1, 100,
     if(!issquarefree(i), next);
     cnt[omega(i)%#cnt+1]++;
     for(k=0,#cnt-1,print1(",mod",k,"=",cnt[k+1]););
     print;
);


?


И еще не получилось сделать вот это:
Dmitriy40 в сообщении #1513640 писал(а):
Если код не умещается в одну строку, то пишите его в обычном текстовом файле и запускайте в PARI/GP или командой \r file в самом PARI/GP, или из консоли вызовом gp64.exe file.

Туплю я куда и что прописывать для запуска. Ввел в пари команду
Код:
\r file
и он на меня заругался. Попытался ввести в командной строке виндовс
Код:
gp64.exe file
и винда ругаться стала. Там может слеши надо прописывать и путь к файлу? В общем что-то я неправильно делаю.

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


20/08/14
8870
Россия, Москва
fosnie в сообщении #1514296 писал(а):
Сроду не знал
Распечатайте 4 страницы Quick Reference Cards - Basic GP со страницы PARI/GP Documentation и держите под рукой, там почти всё есть.
fosnie в сообщении #1514296 писал(а):
почему нельзя внести mod0 в цикл со всеми остальными результатами?
Можно конечно, но тогда будет не так красиво: появится лишняя запятая слева. Способы решения тоже конечно есть, но ведь разговор не про них.
fosnie в сообщении #1514296 писал(а):
В общем что-то я неправильно делаю.
Так наверное file должен быть в текущем каталоге (или доступен по пути), как думаете? А текущий каталог в консоли винды по умолчанию весьма странный (типа c:\windows\system32), вряд ли там есть ваш файл file. Укажите file с полным путём или поменяйте текущий каталог и всё заработает. И к PARI/GP это уже не относится, это особенности ОС.

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


09/04/21

21
Спасибо, обязательно попробую воспользоваться Вашими советами.

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


09/04/21

21
Здравствуйте, поместил код в вордовский файл print.doc. В свойствах этого файла определился такой путь к нему: C:\Documents and Settings\admin\Мои документы, т.е. он лежит в папке Мои документы. Подскажите пожалуйста, как должен выглядеть путь к нему для команды
Код:
\r
, если я хочу запустить этот файл на исполнение из Pari/GP? Т.е. как должна выглядеть команда вместе с путем к файлу?

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


05/09/16
9454
fosnie в сообщении #1514448 писал(а):
Здравствуйте, поместил код в вордовский файл print.doc.

Вы шутите? Файл должен быть plain text. В NotePad делайте...

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


09/04/21

21
wrest в сообщении #1514449 писал(а):
Файл должен быть plain text.


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

wrest в сообщении #1514449 писал(а):
В NotePad делайте...


А в каком формате сохранять файл? И все-же, как его запустить из PARI/GP после сохранения?

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

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


05/09/16
9454
fosnie в сообщении #1514451 писал(а):
Вроде говорилось выше, что можно просто в блокноте в обычном текстовом файле сохранять
Да, но вы-то пишете
fosnie в сообщении #1514448 писал(а):
поместил код в вордовский файл print.doc
Вот в блокноте и пишите, а не в ворде.

-- 15.04.2021, 16:07 --

fosnie в сообщении #1514451 писал(а):
И все-же, как его запустить после сохранения?

Тут я точно не знаю, у меня в линуксе pari, там пути к файлам немного по-другому выглядят.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 428 ]  На страницу Пред.  1 ... 24, 25, 26, 27, 28, 29  След.

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



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

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


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

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