Текст подпрограммы и версий
pa13i_c.zip 
Тексты тестовых примеров
tpa13i_c.zip 

Подпрограмма:  pa13i_c

Назначение

Разложение полинома с целыми коэффициентами на линейные множители с целыми коэффициентами.

Математическое описание

Пусть задан полином степени N с целыми коэффициентами:

             A1 XN + A2 XN-1 + ... + AN X + AN+1

Подпрограмма pa13i_c находит M линейных множителей  Ui x + Vi,  i = 1, 2, ..., M,  с целыми коэффициентами, а также наибольший общий делитель C коэффициентов  Ai,  i = 1, 2, ..., N + 1.

Сначала находятся все делители P коэффициента A1 и все делители Q коэффициента  AN . Затем составляются всевозможные пары из найденных P и Q и проверяется, не является ли двучлен PX - Q множителем исходного полинома. Значения коэффициентов  Ai  не сохраняются.

Использование

    int pa13i_c(integer *a, integer *n, integer *u, integer *v,
        integer *m, integer *c)

Параметры

a - целый одномерный массив длины n + 1, в котором задаются коэффициенты исходного полинома в порядке убывания степеней; исходные значения массива a не сохраняются;
n - заданная степень исходного полинома (тип: целый);
     u, v - целые одномерные массивы длины n, в которых размещаются вычисленные коэффициенты всех линейных множителей;
m - целая переменная, значение которой полагается равной количеству найденных линейных множителей;
c - целая переменная, значение которой полагается равной наибольшему общему делителю коэффициентов исходного полинома.

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Initialized data */
    static int a[4] = { 6,-58,156,-80 };

    /* Local variables */
    extern int pa13i_c(int *, int *, int *,
            int *, int *, int *);
    static int c__, m, u[4], v[4];

    pa13i_c(a, &c__3, u, v, &m, &c__);

    printf("\n %5i %5i %5i %5i \n", a[0], a[1], a[2], a[3]);
    printf("\n %5i %5i %5i %5i \n", u[0], u[1], u[2], u[3]);
    printf("\n %5i %5i %5i %5i \n", v[0], v[1], v[2], v[3]);
    printf("\n %5i %5i \n", m, c__);
    return 0;
} /* main */


Результаты: 

        u = (1, 1, 3) 
        v = (4, 5, 2) 
        m = 3 
        c = 2