Miller Robbin测试模板(无讲解)

想着费马定理和二次探测定理就能随手推了。
做一次是log2n的。
 #include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll T,n;
ll qpow(ll x,ll y,ll mod)
{
ll ans=,base=x;
while(y)
{
if(y&)ans=ans*base%mod;
base=base*base%mod;
y>>=;
}
return ans;
}
bool check(ll p,ll a,ll m,ll q)
{
if(a==p)return ;
ll base=qpow(a,m,p);
ll last=base;
for(int i=;i<=q;++i)
{
base=base*base%p;
if(base==&&last!=&&last!=p-)return ;
last=base;
}
if(base!=)return ;
return ;
}
bool miller(ll n)
{
if(n==)return ;
if(n==)return ;
if(n%==)return ;
ll x=n-,sum=;
while(x%==){++sum;x/=;}
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
if(!check(n,,x,sum))return ;
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin>>T;
while(T--)
{
cin>>n;
cout<<n<<" "<<(miller(n)==?"Yes":"No")<<endl;
}
return ;
}
上一篇:【Bootstrap】如何让响应式图片(img-responsive)水平居中


下一篇:响应式图片菜单式轮播,兼容手机,平板,PC