Простой способ запросить факторизацию по гауссианам - PullRequest
2 голосов
/ 05 августа 2020

Я работаю с гауссовскими целыми числами и успешно использую factor. Однако иногда мнимая часть может исчезнуть sh, но мне все равно нужна факторизация в гауссовых целых числах.

Например, программа for(j=-3, 3, print(j,": ",factor(17+j*I))) пишет:

-3: [-I, 1; 1 + I, 1; 10 + 7*I, 1]
-2: [-I, 1; 2 + 17*I, 1]
-1: [-1, 1; 1 + I, 1; 1 + 2*I, 1; 2 + 5*I, 1]
0: Mat([17, 1])
1: [-I, 1; 1 + I, 1; 2 + I, 1; 5 + 2*I, 1]
2: Mat([17 + 2*I, 1])
3: [-I, 1; 1 + I, 1; 7 + 10*I, 1]

I хотелось бы, чтобы средняя строка в выводе была другой:

-3: [-I, 1; 1 + I, 1; 10 + 7*I, 1]
-2: [-I, 1; 2 + 17*I, 1]
-1: [-1, 1; 1 + I, 1; 1 + 2*I, 1; 2 + 5*I, 1]
0: [-I, 1; 4 + I, 1; 1 + 4*I, 1]
1: [-I, 1; 1 + I, 1; 2 + I, 1; 5 + 2*I, 1]
2: Mat([17 + 2*I, 1])
3: [-I, 1; 1 + I, 1; 7 + 10*I, 1]

Есть какие-то настройки для этого? Или мне придется написать свою собственную «оболочку», которая будет специально обрабатывать этот случай?

1 Ответ

2 голосов
/ 05 августа 2020

Функция factor(x, {D}) получает необязательный параметр D, указывающий область факторизации. Так что просто укажите целевой домен в вызове factor(x, I):

> for(j=-3, 3, print(j,": ",factor(17+j*I, I)))
-3: [-I, 1; 1 + I, 1; 10 + 7*I, 1]
-2: [-I, 1; 2 + 17*I, 1]
-1: [-1, 1; 1 + I, 1; 1 + 2*I, 1; 2 + 5*I, 1]
0: [-I, 1; 4 + I, 1; 1 + 4*I, 1]
1: [-I, 1; 1 + I, 1; 2 + I, 1; 5 + 2*I, 1]
2: Mat([17 + 2*I, 1])
3: [-I, 1; 1 + I, 1; 7 + 10*I, 1]
...