#define N 5
LL random(LL n)
{
return (LL)((double)rand()/RAND_MAX*n+0.5);
}
LL multi(LL a,LL b,LL m) //(a*b)%m
{
LL ans=0;
while(b>0)
{
if(b&1) ans=(ans+a)%m;
b>>=1;
a=(a+a)%m;
}
return ans;
}
LL quick_mod(LL a,LL b,LL m) //a^b%m
{
LL ans=1;
while(b>0)
{
if(b&1) ans=multi(ans,a,m);
b>>=1;
a=multi(a,a,m);
}
return ans;
}
bool miller(LL n)
{
for(int i=1;i<=N;i++)
{
LL a=random(n-2)+1;
if(quick_mod(a,n-1,n)!=1) return false;
}
return true;
}
miller素数测试
最新推荐文章于 2020-11-11 09:53:18 发布