Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/pa_htm_c/pa13i_c.htm
Дата изменения: Thu Nov 26 11:12:01 2015 Дата индексирования: Sun Apr 10 01:20:30 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий pa13i_c.zip |
Тексты тестовых примеров tpa13i_c.zip |
Разложение полинома с целыми коэффициентами на линейные множители с целыми коэффициентами.
Пусть задан полином степени 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