예제 #1
0
        public void Create()
        {
            using randstate_t state0 = randstate_t.Create(RngAlgorithm.MersenneTwister);
            using randstate_t state1 = randstate_t.Create(RngAlgorithm.LinearCongruential, 10UL);

            using mpz_t a            = new mpz_t(10);
            using randstate_t state2 = randstate_t.Create(RngAlgorithm.LinearCongruential, a, 10UL, 10UL);
            using randstate_t state3 = new randstate_t(state2);
        }
예제 #2
0
        public void NextPrimeCandidate()
        {
            string AsString;

            using mpz_t a = new mpz_t("622288097498926496141095869268883999563096063592498055290460");
            AsString      = a.ToString();
            Assert.AreEqual("622288097498926496141095869268883999563096063592498055290460", AsString);

            using randstate_t state = new randstate_t();

            using mpz_t b = new();
            mpz.next_prime_candidate(b, a, state);

            AsString = b.ToString();
            Assert.AreEqual("622288097498926496141095869268883999563096063592498055290461", AsString);
        }
예제 #3
0
        public void LikelyPrime()
        {
            string AsString;
            bool   IsLikelyPrime;

            using mpz_t a = new mpz_t("622288097498926496141095869268883999563096063592498055290461");
            AsString      = a.ToString();
            Assert.AreEqual("622288097498926496141095869268883999563096063592498055290461", AsString);

            using randstate_t state = new randstate_t();

            IsLikelyPrime = mpz.likely_prime_p(a, state, 0);
            Assert.IsTrue(IsLikelyPrime);

            using mpz_t b = a * 2;

            IsLikelyPrime = mpz.likely_prime_p(b, state, 0);
            Assert.IsFalse(IsLikelyPrime);
        }
예제 #4
0
 /// <summary>
 /// See https://www.mpfr.org/mpfr-current/mpfr.pdf.
 /// </summary>
 /// <param name="rop1">The result operand.</param>
 /// <param name="state">The state.</param>
 /// <param name="rnd">The rounding mode.</param>
 public static int nrandom(mpfr_t rop1, randstate_t state, mpfr_rnd_t rnd)
 {
     return(mpfr_nrandom(ref rop1.Value, ref state.Value, (__mpfr_rnd_t)rnd));
 }
예제 #5
0
 /// <summary>
 /// See https://www.mpfr.org/mpfr-current/mpfr.pdf.
 /// </summary>
 /// <param name="rop">The result operand.</param>
 /// <param name="state">The state.</param>
 public static int urandomb(mpfr_t rop, randstate_t state)
 {
     return(mpfr_urandomb(ref rop.Value, ref state.Value));
 }