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 |
public static bool IsPrime(int n, int k) |
||
{ |
{ |
||
if( |
if(n < 2) |
||
{ |
{ |
||
return false; |
return false; |
||
} |
} |
||
if( |
if(n != 2 && n % 2 == 0) |
||
{ |
{ |
||
return false; |
return false; |
||
} |
} |
||
int s = |
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 = |
for (int i = 0; i < k; i++) |
||
{ |
{ |
||
double a = r.Next((int) |
double a = r.Next((int)n - 1) + 1; |
||
int temp = s; |
int temp = s; |
||
int mod = (int)Math.Pow(a, (double)temp) % |
int mod = (int)Math.Pow(a, (double)temp) % n; |
||
while(temp != |
while(temp != n - 1 && mod != 1 && mod != n - 1) |
||
{ |
{ |
||
mod = (mod * mod) % |
mod = (mod * mod) % n; |
||
temp = temp * 2; |
temp = temp * 2; |
||
} |
} |