2014 dxdy logo

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

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




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

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


20/08/14
11766
Россия, Москва
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
11766
Россия, Москва
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
11766
Россия, Москва
Может быть вместо 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
12058
fosnie в сообщении #1514133 писал(а):
А если мне захочется на 137 видов их распределить- это же совсем кошмар.

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

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


20/08/14
11766
Россия, Москва
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
11766
Россия, Москва
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
12058
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
12058
fosnie в сообщении #1514451 писал(а):
Вроде говорилось выше, что можно просто в блокноте в обычном текстовом файле сохранять
Да, но вы-то пишете
fosnie в сообщении #1514448 писал(а):
поместил код в вордовский файл print.doc
Вот в блокноте и пишите, а не в ворде.

-- 15.04.2021, 16:07 --

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

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

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

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



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

Сейчас этот форум просматривают: DariaRychenkova


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

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