素数判定
个人觉得这篇博客总结的很好:http://blog.csdn.net/arvonzhang/article/details/8564836
再添加一个可以直接复制粘贴的模板:
ll POW_MOD(ll aa,ll ii,ll nn) { if(ii==0) return 1%nn; ll temp=POW_MOD(aa,ii>>1,nn); temp=temp*temp%nn; if(ii&1) temp=temp*aa%nn; return temp; } bool TEST (ll n,ll a,ll d) { if(n==2) return true; if(n==a) return true; if((n&1)==0) return false; while(!(d&1)) d=d>>1; ll t=POW_MOD(a,d,n); while((d!=n-1)&&(t!=1)&&(t!=n-1)) { t=(ll)t*t%n; d=d<<1; } return (t==n-1||(d&1)==1); } bool ISPRIME(ll n) { if(n<2) return false; ll a[]= {2,3,5,7,61}; for(int i=0; i<=4; i++) if(!TEST(n,a[i],n-1)) return false; return true; }