2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:02 
Yadryara
Я же писал:
wrest в сообщении #1711204 писал(а):
если всё хорошо (ошибок нет) то там же в папке
make all

Это сделали? :roll:
Можно наверное сразу
sudo make all
Просто я захожу всегда root-ом и мне не надо sudo :D

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:06 
Аватара пользователя
То есть теперь мне надо

quit

sudo make all

?

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:09 
Yadryara в сообщении #1711208 писал(а):
yadryara@DESKTOP-QPP2F5P:/home/pari$ ./Configure --prefix=$HOME/local --mt=pthread
...
Yadryara в сообщении #1711208 писал(а):
./Configure: 60: cannot create /home/pari/config-x86_64-linux429.log: Permission denied
./Configure: 67: cannot create /home/pari/config-x86_64-linux429.log: Permission denied
Пишет же, что прав не хватает...
Про sudo wrest уже писал-же ранее.

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:12 
Yadryara в сообщении #1711215 писал(а):
То есть теперь мне надо

quit

Ну если вы ещё тут
Yadryara в сообщении #1711212 писал(а):
(Press Enter to retry, or Control-D to exit; default file extension is `.log')
Please type another transcript file name:

То Ctrl-D
И затем
sudo make clean
потом
sudo make all
наконец
sudo make install

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:21 
Аватара пользователя
DemISdx
Какие люди :D

Да, после всех трёх команд

Ctrl+D
sudo make clean
sudo make all

много текста. Особенно сейчас.

-- 30.11.2025, 17:23 --

Код:
Transcript written on users.log.
rm -f tutorial.std
tex tutorial
This is TeX, Version 3.141592653 (TeX Live 2023/Debian) (preloaded format=tex)
(./tutorial.tex (./parimacro.tex (./paricfg.tex)
FIRST PASS
No aux file.) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
[15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29]
[30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44]
[45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] )
Output written on tutorial.dvi (59 pages, 231940 bytes).
Transcript written on tutorial.log.
tex tutorial
This is TeX, Version 3.141592653 (TeX Live 2023/Debian) (preloaded format=tex)
(./tutorial.tex (./parimacro.tex (./paricfg.tex)
FIRST PASS
(./tutorial.aux)) [1] [2] (./tutorial.toc) [3] [4] [5] [6] [7] [8] [9] [10]
[11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25]
[26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40]
[41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55]
[56] [57] [58] [59] )
Output written on tutorial.dvi (59 pages, 239780 bytes).
Transcript written on tutorial.log.
latex tutorial-mf.tex
make[1]: latex: No such file or directory
make[1]: *** [Makefile:36: tutorial-mf.dvi] Error 127
make[1]: Leaving directory '/home/pari/doc'
make: [Makefile:31: all] Error 2 (ignored)
yadryara@DESKTOP-QPP2F5P:/home/pari$

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:25 
Yadryara
Это сделали?
wrest в сообщении #1711218 писал(а):
наконец
sudo make install

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:26 
Аватара пользователя
Сделал. И написал об этом выше.

Код:
yadryara@DESKTOP-QPP2F5P:/home/pari$ ./gp
Reading GPRC: /etc/gprc
GPRC Done.

                                GP/PARI CALCULATOR Version 2.18.1 (development 30566-7378c334ce)
                                  amd64 running linux (x86-64/GMP-6.3.0 kernel) 64-bit version
                            compiled: Nov 30 2025, gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)
                                           threading engine: pthread, nbthreads = 12
                                         (readline v8.2 enabled, extended help enabled)

                                             Copyright (C) 2000-2025 The PARI Group

PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER.

Type ? for help, \q to quit.
Type ?18 for how to get moral (and possibly technical) support.

parisize = 8000000, primelimit = 1048576, factorlimit = 1048576
?

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:35 
Прекрасно.
Шаги со сборкой начиная с команды ./Configure придется повторять как минимум один раз, может несколько. Как пойдёт.

Теперь так.
Найдите файл ifactor1.c и в конец файла, после последней закрывающей скобки } добавьте исходный код новой функции
код: [ скачать ] [ спрятать ]
Используется синтаксис C
/* Returns:
 *   k = omega(n) if omega(n) <= m,
 *   0           if omega(n) > m,
 *   0           if s == 0 and n is not squarefree.
 *
 * Arguments:
 *   n: positive integer (t_INT)
 *   m: maximum number of distinct prime factors allowed (t_INT)
 *   s: squarefree flag (t_INT): s == 0 → require squarefree; s != 0 → ignore exponents
 */

GEN
omega_upto(GEN n, GEN m, GEN s)
{
    pari_sp av = avma;
    long M, nb = 0;
    long squarefree = (typ(s) == t_INT && signe(s) == 0); /* s == 0 */
    ulong p, B;

    if (typ(n) != t_INT || signe(n) <= 0) pari_err_TYPE("omega_upto", n);
    if (typ(m) != t_INT || signe(m) <= 0) pari_err_TYPE("omega_upto", m);
    if (cmpiu(n, 1) <= 0) return gen_0;

    M = itos(m);
    if (M <= 0) return gen_0;

    n = absi(n); /* работает с |n| и возвращает новый объект */

    /* --- Этап 1: обработка малых простых (2, 3, 5, 7) --- */

    /* 2 */
    if (!mod2(n))  /* если чётное */
    {
        long v = vali(n);
        if (squarefree && v > 1) { set_avma(av); return gen_0; }
        nb++;
        if (nb > M) { set_avma(av); return gen_0; }
        n = shifti(n, -v);  /* n /= 2^v */
        if (is_pm1(n)) goto done;
    }

    /* 3, 5, 7 */
    {
        const ulong small_primes[] = {3, 5, 7};
        long j;
        for (j = 0; j < 3; j++)
        {
            p = small_primes[j];
            if (dvdii(n, utoipos(p)))
            {
                long v = Z_lvalrem(n, p, &n);
                if (squarefree && v > 1) { set_avma(av); return gen_0; }
                nb++;
                if (nb > M) { set_avma(av); return gen_0; }
                if (is_pm1(n)) goto done;
            }
        }
    }

    /* Граница trial division как в factor() */
    B = tridiv_bound(n);

    /* Trial division по глобальной primetab */
    {
        long i, l = lg(primetab);
        for (i = 1; i < l; i++)
        {
            ulong p_val = itou(gel(primetab, i));
            if (p_val > B) break;
            if (p_val <= 7) continue; /* уже обработаны */

            if (dvdii(n, utoipos(p_val)))
            {
                long v = Z_lvalrem(n, p_val, &n);
                if (squarefree && v > 1) {
                    set_avma(av);
                    return gen_0;
                }
                nb++;
                if (nb > M) {
                    set_avma(av);
                    return gen_0;
                }
                if (is_pm1(n)) goto done;
            }
        }
    }

    /* --- Этап 2: остаток --- */
    if (is_pm1(n)) goto done;

    /* Если остаток простой — учтём его */
    if (ifac_isprime(n))
    {
        nb++;
        if (nb > M) { set_avma(av); return gen_0; }
        goto done;
    }

    /* Если уже найдено M делителей, а остаток >1 → будет >M */
    if (nb >= M)
    {
        set_avma(av);
        return gen_0;
    }

    /* --- Этап 3: ifac_start только для составного остатка --- */
    {
        GEN part = ifac_start(n, squarefree ? 1 : 0);
        GEN here;
        for (;;)
        {
            here = ifac_main(&part);
            if (!here) break;         /* факторизация завершена */
            if (here == gen_0)
            {
                set_avma(av);
                return gen_0;         /* квадрат найден в Moebius-режиме */
            }

            nb++;
            if (nb > M)
            {
                set_avma(av);
                return gen_0;
            }
            ifac_delete(here);
        }
    }

done:
    set_avma(av);
    return (nb >= 1) ? stoi(nb) : gen_0;
}


Найдите файл paridecl.h и там вставьте строку,
GEN omega_upto(GEN n, GEN m, GEN s);
вот кусочек как получилось у меня (я добавил комментарии до и после строки)
Используется синтаксис C
/* ifactor1.c */

GEN     Z_ECM(GEN N, long rounds, long seed, ulong B1);
GEN     Z_factor(GEN n);
GEN     Z_factor_limit(GEN n, ulong all);
GEN     Z_factor_until(GEN n, GEN limit);
/* added by wrest begin */
GEN     omega_upto(GEN n, GEN m, GEN s);
/* added by wrest end */
long    Z_issmooth(GEN m, ulong lim);


Сохраните изменения в этих двух файлах и пересобирайте pari/gp

Когда пересоберёте и запустите ./gp то дайте команду
install(omega_upto,GGG);

Теперь можно пользоваться новой функцией.
Но при каждом запуске pari надо давать команду install чтобы функция работала.

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:45 
Аватара пользователя
wrest в сообщении #1711225 писал(а):
Найдите файл ifactor1.c

Не, такого нету. В папке /home/pari.

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 17:55 
Yadryara в сообщении #1711230 писал(а):
Не, такого нету. В папке /home/pari.

Ищите в подпапках.

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 18:06 
Аватара пользователя
wrest

Нашёл. Оба файла поправил.

Просьба ещё раз в одном месте перечислить команды пересборки.

-- 30.11.2025, 18:12 --

wrest

Правильно понимаю?

Пересборка:

./Configure --prefix=$HOME/local --mt=pthread
sudo make all
sudo make install
./gp
install(omega_upto,GGG);

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 18:17 
Yadryara в сообщении #1711238 писал(а):
Просьба ещё раз в одном месте перечислить команды пересборки.

В папке pari
sudo make clean
sudo ./Configure --prefix=$HOME/local --mt=pthread
sudo make all
sudo make install

Я не очень уверен нужны ли обязательно первые две, но работать должно надёжно.
Запуск, из папки pari
./gp
И после каждого запуска интерпретатора, уже в самом pari чтобы функция начала работать,
install(omega_upto,GGG);

Для запуска существующей инсталляции, которую делали из репозитория ubuntu при помощи apt install (сейчас там весия 2.17.2) команда
gp из любой папки.
Там всё осталось как было и соответственно install(omega_upto,GGG); работать не будет.

 
 
 
 Re: Линукс: сборка исполняемого PARI/gp
Сообщение30.11.2025, 18:59 
Аватара пользователя
Благодарю. Вроде всё работает. Теперь буду сам тестить и вас пока не напрягать :-)

 
 
 [ Сообщений: 28 ]  На страницу Пред.  1, 2


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