第1个回答 2014-03-08
const int MCCNT=10; bool composite;
__int64 power(__int64 a,__int64 p ,__int64 n)
{
__int64 x,result;
if(p == 0) return 1;
else{
x=power(a,p/2,n);
result = (x*x)%n;
if(result==1 && (x!=1) && (x != (n-1)) ) composite = true;
if(p%2==1) result=(result*a)%n;
}
return result;
}
bool primeMC(__int64 n)
{
composite = false;
__int64 a,result;
for(int i=1;i<=MCCNT;i++)
{
a= ( (double) rand() / (double) RAND_MAX )*(n-3)+2;
result=power(a,n-1,n);
if(composite || (result !=1)) return false;
}
return true;
}