判断一个数是不是质数
long long multiMod(long long a,long long b,long long mod){long long res=0;while(b){if(b&1){res=res+a;if(res>=mod) res-=mod;}a=a+a;if(a>=mod) a-=mod;b>>=1;}return res;}long long powMod(long long a,long long b,long long mod){long long res=1;while(b){if(b&1){res=multiMod(res,a,mod);}a=multiMod(a,a,mod);b>>=1;}return res;}bool check(long long a,long long n,long long x,int t){long long res=powMod(a,x,n);long long last=res;for(int i=1; i<=t; i++){res=multiMod(res,res,n);if(res==1&&last!=1&&last!=n-1) return true;last=res;}return res!=1;}long long randomVal(long long n){return ((double)rand()/RAND_MAX*n+0.5);}const int times=8;bool IsPrime(long long n){if(n<2) return false;if(n==2) return true;if(!(n&1)) return false;long long x=n-1,t=0;while((x&1)==0){t++;x>>=1;}for(int i=0; i<times; i++){long long a=randomVal(n-2)+1;if(check(a,n,x,t)) return false;}return true;}
