不定期更。
数论
1 const int pri[12]={2,3,5,7,11,13,17,19,23,29,31,37}; 2 ll ksc(ll x,ll y,ll mod){ 3 ll tmp=x*y-(ll)((ld)x/mod*y+0.5)*mod; 4 return tmp<0?tmp+mod:tmp; 5 } 6 ll ksm(ll x,ll p,ll mod){ 7 ll ret=1; 8 for (;p;p>>=1,x=ksc(x,x,mod)) if (p&1) ret=ksc(ret,x,mod); 9 return ret; 10 } 11 bool MR(ll n){ 12 if (n<=1) return 0; 13 rep (i,0,11) if (n==pri[i]) return 1; 14 ll d=n-1; int tmp=0; 15 while (!(d&1)) d>>=1,tmp++; 16 rep (i,0,11){ 17 ll x=ksm(pri[i],d,n),p=x; 18 rep (t,1,tmp){ 19 x=ksc(x,x,n); 20 if (x==1 && p!=1 && p!=n-1) return 0; 21 p=x; 22 } 23 if (x!=1) return 0; 24 } 25 return 1; 26 }