Как найти наибольшую степень деления числа 2 с помощью GMP? - PullRequest
2 голосов
/ 25 октября 2010

Согласно документации GMP здесь :

Функция: unsigned long int mpz_remove (mpz_t rop, mpz_t op, mpz_t f)

Удалить все вхождениямножителя f из op и сохраните результат в rop.Возвращаемое значение - это количество таких случаев, которые были удалены.

Таким образом, функция mpz_remove должна использоваться для ответа на названный вопрос.На данный момент мой код выглядит следующим образом:

  mpz_set_ui(temp2,2);
  mpz_remove(temp,K0,temp2);

, который работает нормально, но я хочу получить результат K0, деленный на temp (а не сам temp) [который я мог бы получить, добавив последующую операцию деления,но это кажется расточительным].

Как мне получить K0 / temp?

1 Ответ

1 голос
/ 27 октября 2010

Вы можете попробовать комбинацию mpz_scan1 () и mpz_tdiv_q_2exp ().

mpz_tdiv_q_2exp(result,K0,mpz_scan1(K0,0))
...