ll p;
ll mul(ll a,ll b)
{
ll r=0;
while(b)
{
if(b&1) r+=a,r%=p;
a<<=1;
a%=p;
b>>=1;
}
return r;
}
ll qm(ll a,ll b)
{
ll r=1;
while(b)
{
if(b&1) r=mul(r,a);
a=mul(a,a);
b>>=1;
}
return r;
}
bool Miller_Rabin()
{
if(p==2) return true;
if(p==1||p%2==0) return false;
ll x,y,m,k=0,a;
m=p-1;
while(m%2==0) k++,m>>=1;
int T=4;
while(T--)
{
a=rand()%(p-1)+1;
x=qm(a,m);
for(int i=1; i<=k; i++)
{
y=mul(x,x);
if(x&1 && y==1 && x!=1 && x!=p-1) return false;
x=y;
}
if(x!=1) return false;
}
return true;
}
Miller_Rabin素数检测
最新推荐文章于 2022-12-17 17:06:44 发布