Miller–Rabin primality test: Difference between revisions

Content added Content deleted
Line 402: Line 402:
public static class RabinMiller
public static class RabinMiller
{
{
public static bool IsPrime(int p)
public static bool IsPrime(int n, int k)
{
{
if(p < 2)
if(n < 2)
{
{
return false;
return false;
}
}
if(p != 2 && p % 2 == 0)
if(n != 2 && n % 2 == 0)
{
{
return false;
return false;
}
}
int s = p - 1;
int s = n - 1;
while(s % 2 == 0)
while(s % 2 == 0)
{
{
Line 418: Line 418:
}
}
Random r = new Random();
Random r = new Random();
for (int i = 1; i < 11; i++)
for (int i = 0; i < k; i++)
{
{
double a = r.Next((int)p - 1) + 1;
double a = r.Next((int)n - 1) + 1;
int temp = s;
int temp = s;
int mod = (int)Math.Pow(a, (double)temp) % p;
int mod = (int)Math.Pow(a, (double)temp) % n;
while(temp != p - 1 && mod != 1 && mod != p - 1)
while(temp != n - 1 && mod != 1 && mod != n - 1)
{
{
mod = (mod * mod) % p;
mod = (mod * mod) % n;
temp = temp * 2;
temp = temp * 2;
}
}