YoushouldhavereceivedcopiesoftheGNUGeneralPublicLicenseandthe GNULesserGeneralPublicLicensealongwiththeGNUMPLibrary.Ifnot,
see https://www.gnu.org/licenses/. */
#if WANT_ORIGINAL_DEST
mp_ptr dp;
dp = PTR (dest); #endif /* We could perhaps compute mpz_scan1(src,0)/mpz_scan1(f,0). It is an upperboundoftheresultwe'reseeking.Wecouldalsoshiftdownthe operandssothattheybecomeodd,tomakeintermediatevalues
smaller. */
mpz_init_set (fpow[0], f);
mpz_swap (dest, x);
p = 1; /* Divide by f, f^2 ... f^(2^k) until we get a remainder for f^(2^k). */ while (ABSIZ (dest) >= 2 * ABSIZ (fpow[p - 1]) - 1)
{
mpz_init (fpow[p]);
mpz_mul (fpow[p], fpow[p - 1], fpow[p - 1]);
mpz_tdiv_qr (x, rem, dest, fpow[p]); if (SIZ (rem) != 0) {
mpz_clear (fpow[p]); break;
}
mpz_swap (dest, x);
p++;
}
pwr = ((mp_bitcnt_t)1 << p) - 1;
/* Divide by f^(2^(k-1)), f^(2^(k-2)), ..., f for all divisors that give
a zero remainder. */ while (--p >= 0)
{
mpz_tdiv_qr (x, rem, dest, fpow[p]); if (SIZ (rem) == 0)
{
pwr += (mp_bitcnt_t)1 << p;
mpz_swap (dest, x);
}
mpz_clear (fpow[p]);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.