Miller–Rabin primality test: Difference between revisions

Content added Content deleted
No edit summary
Line 294: Line 294:
public static bool isPrime(int p)
public static bool isPrime(int p)
{
{
if(p<2)
if(p<2)
{
{
return false;
return false;
}
}
if(p!=2 && p%2==0)
if(p!=2 && p%2==0)
{
{
return false;
return false;
}
}
int s=p-1;
int s=p-1;
while(s%2==0)
while(s%2==0)
{
{
s>>=1;
s>>=1;
}
}
for (int i = 1; i < 11;i++)
for (int i = 1; i < 11;i++)
{
{
Random r = new Random();
Random r = new Random();
double a = r.Next((int)p - 1) + 1;
double a = r.Next((int)p - 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) % p;
while(temp!=p-1 && mod!=1 && mod!=p-1)
while(temp!=p-1 && mod!=1 && mod!=p-1)
{
{
mod=(mod*mod)%p;
mod=(mod*mod)%p;
temp=temp*2;
temp=temp*2;
}
}
if(mod!=p-1 && temp%2==0)
if(mod!=p-1 && temp%2==0)
{
{
return false;
return false;
}
}
}
}
return true;
return true;
}
}
}
}