啊啊啊啊啊第三次了
int mul(int a,int b,int p){
int x=0,y=a%p;
while(b){
if(b&1) x=(x+y)%p;
y=y*2%p;
b/=2;
}
return x;
}
int pow(int b,int e,int p){
int x=1,y=b;
while(e){
if(e&1) x=mul(x,y,p);
y=mul(y,y,p);
e/=2;
}
return x;
}
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
bool isprime(int p){
default_random_engine e;
uniform_int_distribution<int> u(1,p);
if(p<2) return false;
if(p==2) return true;
if(!(p&1)) return false;
int q=p-1;
while(!(q&1)) q>>=2;
for(int i=1;i<=30;i++){
int a=u(e),t=q,m=pow(a,t,p);
while(t!=p-1&&m!=1&&m!=p-1) m=mul(m,m,p),t*=2,cout<<"haore"<<endl;
if(m!=p-1&&!(t&1)) return false;
}
return true;
}