2014 dxdy logo

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

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




На страницу Пред.  1 ... 56, 57, 58, 59, 60  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 60 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 72
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение25.10.2025, 17:12 
А чтобы не было Goodbye! и остальных лишних строк есть ключик -q:
gp.exe -q my.gp

Ещё часто удобно запускать счёт сразу с минимальным приоритетом (и в отдельном консольном окне), чтобы он меньше мешал другой работе. Это конечно можно и потом поменять, в диспетчере задач, но можно и сразу:
start /low gp.exe -q my.gp

Кроме того, если нужная папка на другом диске кроме C, то в cd можно (начиная кажется с Win7) добавить ключик /d:
cd /d T:\MyPARI

Можно даже объединить всё это в одну команду в консоли:
cd /d T:\MyPARI && start /low gp.exe -q my.gp
Двойной && тут чтобы при ошибке команды cd дальше ничего не запускалось.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 18:49 
Здравствуйте, совсем не знал синтаксиса pari, да еще забыл его и в итоге проблема.
Код:
a=prime(1)-1;
for(n=1,37, a=a*(prime(n+1)-1), print(a))


Не фурычит, в чем ошибка подскажите пожалуйста?

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 19:14 
Аватара пользователя
проблемы с перестановками.
как быстро переставить цифры в числе, получая числа?
попытка:
n=3577;
d=digits(n); ds=vecsort(d);
forperm(d <ds?> ,p,
m=fromdigits(Vec(p));
...

или через forperm(#d ,p,
или вообще по другим операциям? Собственно, есть числа, представимые в виде суммы двух своих пермутаций:
450=405+045; 504=450+054; 954 = 495+459;
Но можно ли так разложить простое число?

Altenter, у вас синтаксис. перед принтом поставьте точку с запятой вместо запятой.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 19:21 
gris в сообщении #1707605 писал(а):
проблемы с перестановками.
как быстро переставить цифры в числе, получая числа?
попытка:
n=3577;
d=digits(n); ds=vecsort(d);
forperm(d <ds?> ,p,
m=fromdigits(Vec(p));
...

или через forperm(#d ,p,
или вообще по другим операциям? Собственно, есть числа, представимые в виде суммы двух своих пермутаций:
450=405+045; 504=450+054; 954 = 495+459;
Но можно ли так разложить простое число?
А с просто нечетными такое проделать у Вас получалось?
gris в сообщении #1707605 писал(а):
Altenter, у вас синтаксис. перед принтом поставьте точку с запятой.

Спасибо, сейчас попробую.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 19:57 
Аватара пользователя
Altenter, с нечётными получалось иногда
4304899521 = 2159904438 + 2144995083
но их всегда ровно два.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 20:02 
gris
Надо forperm(#d,p,, при этом в p будет не само число, а список перестановки массива d, соответственно число надо получать как m=fromdigits(vecextract(d,p)).

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 20:26 
Аватара пользователя
Dmitriy40, я пробовал так, но с большими числами получаются лишние проверки из-за кратности цифр :-( .а проверяется разность числа и перестановки на такой же набор цифр
m=fromdigits(vecextract(d,p));
l=n-m;
if(l>0 && vecsort(digits(l))==ds, print(,n," = ",m," + ",l));

Впрочем, даже представление и в виде разности для простых не находится. Надежда на большие диапазоны, но это долго :evil:

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 20:53 
gris
А 1089=198+891 и 1809=891+918 Ваше условие обнаруживает? У меня - нет.
Чтобы было чуть побыстрее, можно сначала сформировать все допустимые перестановки (меньше p) в массив, отсортировать его без повторов (Set или vecsort(,,8)), и потом пройтись по нему до p/2 проверяя есть ли разница в этом же массиве (setsearch).

-- 29.10.2025, 21:01 --

Для больших чисел (больше миллиарда видимо) полезно будет поделить список перестановок на 10 (или 100) частей по младшей цифре, ведь много перестановок в принципе не могут дать исходное число, например если исходное число имеет младшую 1, а текущая перестановка младшую 4 при том что в d[] нет цифры 7. А если даже 7 и есть, то лишь в 1/10 всех перестановок и их можно проверить в 10 раз быстрее. Ну как-то так.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 21:18 
Аватара пользователя
Dmitriy40, такое может случиться, если вперед 1 и есть 0 в середине. Хотел выделить в отдельную программу, но пока руки не дошли :D

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 21:27 
Простых с таким разложением не нашёл до $10^7$.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение29.10.2025, 21:39 
gris в сообщении #1707605 писал(а):
Но можно ли так разложить простое число?

Нет, нельзя. Числа должны делиться на 9.

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение30.10.2025, 09:37 
Аватара пользователя
wrest, спасибо за плодотворную идею рассматривать удевятерённые простые. И сразу нашлись таковые:
1503 = 153 + 1350 <167 = 17 + 150>
3501 = 351 + 3150 <389 = 39 + 350>
5013 = 1503 + 3510 <557 = 167 + 390>
5409 = 459 + 4950 <601 = 51 + 550>
5823 = 2538 + 3285 <647 = 282 + 365>
6147 = 1476 + 4671 <683 = 164 + 519>

Не решаюсь далее добавлять в полезную тему лишнее. :oops:

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение04.11.2025, 21:42 
Аватара пользователя
1. У кого-нибудь есть опыт компиляции скриптов на PARI\GP в исполняемый файл?
2. У кого-нибудь есть опыт компиляции скриптов на PARI\GP в исполняемый файл под Винды?

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2025, 00:24 
EUgeneUS в сообщении #1708317 писал(а):
2. У кого-нибудь есть опыт компиляции скриптов на PARI\GP в исполняемый файл под Винды?

Не думаю, что это возможно (в смысле получить .exe под win32). "Под винды" если только в WSL/WSL2.

-- 05.11.2025, 01:19 --

EUgeneUS в сообщении #1708317 писал(а):
1. У кого-нибудь есть опыт компиляции скриптов на PARI\GP в исполняемый файл?

Боюсь, тут может быть некоторое непонимание процесса. Скрипт (функция, замыкание) компилируется в C, получается текст на C который далее компилируется как библиотека принятым в системе компилятором C в нужную архитектуру (x86 или arm64/aarch64 и т.п.), этот код вызывает библиотечные функции libpari с одной стороны, и вызывается интерпретатором gp с другой. Собственно "исполняемым файлом" всё равно является [интерпретатор] gp. Как-то так...

Вот тут пример компиляции в C post1331422.html#p1331422

 
 
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение05.11.2025, 08:14 
Аватара пользователя
wrest в сообщении #1708334 писал(а):
Боюсь, тут может быть некоторое непонимание процесса.


Насколько понял из документации, есть три способа использовать PARI:

1. Пишем скрипт. Этот скрипт исполняет\интерпретирует gp. Скажем так, общеизвестный способ.
2. Пишем код сразу на C, используем библиотеки PARI (libpari), насколько понимаю. Компилируем в исполняемый файл.
3. Пишем скрипт. Переводим его в код на С утилитой gp2c. Компилируем код в исполняемый файл.

Интересуют пункты 2 и 3. В особенности 3.
Насколько понял, Вы делали, как описано в пункте 3. Поэтому вопросы по нему:

1. Утилита gp2c может ли работать во Виндой? Если да, то пробовали её запускать из под Винды?
2. Если утилита gp2c не может работать во Виндой, то возможен ли такой вариант:
а) переводим код PARI в С на системе с Линуксом.
б) получившийся код на С компилируем в Винде для создания исполняемого файла под Виндой?

И не очень понял, если мы переводим код в С, а потом компилируем в исполняемый файл, то причем тут интерпретатор gp?

 
 
 [ Сообщений: 889 ]  На страницу Пред.  1 ... 56, 57, 58, 59, 60  След.


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