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>()); }
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(); } }