int32_t isPrime(uint8_t* num){ int32_t i=0; for(;i<sizeof(small_primes);++i) if(bigSMod(num,small_primes[i])==0) return 0; return millerRabin(num); }
bool millerRabin(num n, std::vector<num> witness) { for (int i = 0; i < witness.size(); ++i) { if (not millerRabin(n, witness[i])) return false; } return true; }
bool millerRabin(num n) { std::vector<num> w; if (n < 2047) return millerRabin(n, 2); else if (n < 9080191) w = {31, 73}; else if (n < 4759123141L) w = {2, 7, 61}; else if (n < 1122004669633L) w = {2, 13, 23, 1662803}; else { std::cout << "Miller Rabin Test: Number too large for predefined witnesses!" << std::endl; return false; } return millerRabin(n, w); }
int main() { unsigned long long a=1; unsigned long long p=1<<30; p*=2; printf("0"); while(1) { a=(a+1234567890)%(p); printf("%d",millerRabin(a,1000)); //getchar(); } return 0; }