AtkinPrimeSieve constructor

AtkinPrimeSieve(
  1. int max
)

Constructs the prime sieve of Atkin.

Implementation

AtkinPrimeSieve(super.max) : _isPrime = BitList.filled(max + 1, false) {
  if (max >= 2) _isPrime[2] = true;
  if (max >= 3) _isPrime[3] = true;
  for (var i = 1; i * i <= max; i++) {
    for (var j = 1; j * j <= max; j++) {
      final k1 = 4 * i * i + j * j;
      if (k1 <= max && (k1 % 12 == 1 || k1 % 12 == 5)) {
        _isPrime.flip(k1);
      }
      final k2 = 3 * i * i + j * j;
      if (k2 <= max && k2 % 12 == 7) {
        _isPrime.flip(k2);
      }
      final k3 = 3 * i * i - j * j;
      if (i > j && k3 <= max && k3 % 12 == 11) {
        _isPrime.flip(k3);
      }
    }
  }
  for (var i = 5; i * i <= max; i++) {
    if (_isPrime[i]) {
      for (var j = i * i; j <= max; j += i * i) {
        _isPrime[j] = false;
      }
    }
  }
}