Ejemplo n.º 1
0
        private static BigInteger[] GeneratePrimes(int lengthBits, int count)
        {
            BigInteger       start          = BigInteger.Pow(2, lengthBits - 1);
            BigInteger       finish         = BigInteger.Pow(2, lengthBits) - 1;
            BigInteger       range          = finish - start + 1;
            var              list           = new List <BigInteger>();
            var              checkedNumbers = new List <BigInteger>();
            BigIntegerRandom rand           = new BigIntegerRandom();

            while (checkedNumbers.Count < range && list.Count < count)
            {
                var shift = rand.Next(0, range);
                var temp  = start + shift;
                if (!checkedNumbers.Contains(temp))
                {
                    if (BigIntegerPrimeTest.MillerRabinTest(temp) && temp != 2)
                    {
                        list.Add(temp);
                    }
                    checkedNumbers.Add(temp);
                }
            }
            return(list.ToArray <BigInteger>());
            //listOfArraysOfPrimes.Add(list.ToArray<BigInteger>());
        }
Ejemplo n.º 2
0
        private void OnGeneratePBtnClick(object sender, RoutedEventArgs e)
        {
            int  bitsLength = 1;
            bool isValid    = int.TryParse(bitsLengthTxtBox.Text, out bitsLength);

            if (isValid)
            {
                var        rand   = new BigIntegerRandom();
                BigInteger start  = BigInteger.Pow(2, bitsLength - 1);
                BigInteger finish = BigInteger.Pow(2, bitsLength) - 1;
                BigInteger range  = finish - start + 1;
                BigInteger p      = 1;
                do
                {
                    var shift = rand.Next(0, range);
                    p = start + shift;
                }while (BigIntegerPrimeTest.MillerRabinTest(p));
                pTxtBox.Text = p.ToString();
            }
        }