This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub AlexanderNekrasov/Youthful-Passion-Fruit-teambook
/**
* Author: Iurii Pustovalov
* Date: 2022-11-08
* Description: Checking primality of p
* Time: O(\log(C))
*/
const int iters = 8; // can change
bool isprime(ll p) {
if (p == 1 || p == 4)
return 0;
if (p == 2 || p == 3)
return 1;
for (int it = 0; it < iters; ++it) {
ll a = rnd() % (p - 2) + 2;
ll nw = p - 1;
while (nw % 2 == 0)
nw /= 2;
ll x = binpow(a, nw, p); // int128
if (x == 1)
continue;
ll last = x;
nw *= 2;
while (nw <= p - 1) {
x = (__int128_t)x * x % p;
if (x == 1) {
if (last != p - 1) {
return 0;
}
break;
}
last = x;
nw *= 2;
}
if (x != 1)
return 0;
}
return 1;
}
#line 1 "math/PrimalityTest.cpp"
/**
* Author: Iurii Pustovalov
* Date: 2022-11-08
* Description: Checking primality of p
* Time: O(\log(C))
*/
const int iters = 8; // can change
bool isprime(ll p) {
if (p == 1 || p == 4)
return 0;
if (p == 2 || p == 3)
return 1;
for (int it = 0; it < iters; ++it) {
ll a = rnd() % (p - 2) + 2;
ll nw = p - 1;
while (nw % 2 == 0)
nw /= 2;
ll x = binpow(a, nw, p); // int128
if (x == 1)
continue;
ll last = x;
nw *= 2;
while (nw <= p - 1) {
x = (__int128_t)x * x % p;
if (x == 1) {
if (last != p - 1) {
return 0;
}
break;
}
last = x;
nw *= 2;
}
if (x != 1)
return 0;
}
return 1;
}