Я пытаюсь закодировать расширенный евклидов алгоритм, используя библиотеку GMP , потому что я использую большие числа. Мой алгоритм - базовый c, только что адаптированный для номеров GMP.
Но у меня проблема с моим временем l oop. Код ниже является воспроизводимым примером моего алгоритма. Я изменил содержимое l oop только для тестирования.
void euclid(mpz_t a, mpz_t b){
mpz_t r1, r2, u1, u2, v1, v2;
mpz_init_set_ui(u1, 1);
mpz_init_set_ui(v1, 0);
mpz_init_set_ui(u2, 0);
mpz_init_set_ui(v2, 1);
mpz_inits(r1, r2);
mpz_set(r1, a);
mpz_set(r2, b);
while(mpz_cmp_ui(r2, 0))
{
gmp_printf("r2 : %Zd\n", r2);
mpz_sub_ui(r2, r2, 1);
mpz_t q;
mpz_init(q);
}}
Кажется, что l oop не выполняется .
Ищем источник проблемы, я попытался упростить l oop и получаю проблему (l oop больше не выполняется) всякий раз, когда добавляю строку "mpz_init (q);". Я назвал свою функцию euclid равной mpz_t 33, а b равной mpz_t 5.