从网上找了一个,但是莫名其妙判不过去,某题的数据范围小于 1e10,换成暴力后就过了,求查错/kk
ll Test[17] = {2, 3, 5, 7, 11, 13, 17,19,23,29,31,37,41,43,47,53,59};
bool Query(ll P) {
if(P == 1) return 0;
ll t = P - 1, k = 0;
while(!(t & 1)) k++, t >>= 1;
for(int i = 0; i < 17; i++) {
if(P == Test[i]) return 1;
ll a = pow(Test[i], t, P), nxt = a;
for(int j = 1; j <= k; j++) {
nxt = (a * a) % P;
if(nxt == 1 && a != 1 && a != P - 1) return 0;
a = nxt;
}
if(a != 1) return 0;
}
return 1;
}