function isPrime(n) {
if (isNaN(n) || !isFinite(n) || n % 1 || n < 2) {
return false;
}
if (n % 2 === 0) return n === 2;
if (n % 3 === 0) return n === 3;
if (n % 5 === 0) return n === 5;
const m = Math.sqrt(n);
for (let i = 7; i <= m; i += 30) {
if (n % i === 0) return i === n;
if (n % (i + 4) === 0) return i + 4 === n;
if (n % (i + 6) === 0) return i + 6 === n;
if (n % (i + 10) === 0) return i + 10 === n;
if (n % (i + 12) === 0) return i + 12 === n;
if (n % (i + 16) === 0) return i + 16 === n;
if (n % (i + 22) === 0) return i + 22 === n;
if (n % (i + 24) === 0) return i + 24 === n;
}
return true;
}
function* generatePrimes(n) {
for (let i = 0; i < n; i++) {
if (isPrime(i)) {
yield i;
}
}
}
(function test() {
const p = generatePrimes(100);
do {
a = p.next();
if(!a.done) {
console.log(a.value);
}
} while(!a.done);
})();
ZnVuY3Rpb24gaXNQcmltZShuKSB7CiAgICBpZiAoaXNOYU4obikgfHwgIWlzRmluaXRlKG4pIHx8IG4gJSAxIHx8IG4gPCAyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKG4gJSAyID09PSAwKSByZXR1cm4gbiA9PT0gMjsKICAgIGlmIChuICUgMyA9PT0gMCkgcmV0dXJuIG4gPT09IDM7CiAgICBpZiAobiAlIDUgPT09IDApIHJldHVybiBuID09PSA1OwogICAgY29uc3QgbSA9IE1hdGguc3FydChuKTsKICAgIGZvciAobGV0IGkgPSA3OyBpIDw9IG07IGkgKz0gMzApIHsKICAgICAgICBpZiAobiAlIGkgPT09IDApIHJldHVybiBpID09PSBuOwogICAgICAgIGlmIChuICUgKGkgKyA0KSA9PT0gMCkgcmV0dXJuIGkgKyA0ID09PSBuOwogICAgICAgIGlmIChuICUgKGkgKyA2KSA9PT0gMCkgcmV0dXJuIGkgKyA2ID09PSBuOwogICAgICAgIGlmIChuICUgKGkgKyAxMCkgPT09IDApIHJldHVybiBpICsgMTAgPT09IG47CiAgICAgICAgaWYgKG4gJSAoaSArIDEyKSA9PT0gMCkgcmV0dXJuIGkgKyAxMiA9PT0gbjsKICAgICAgICBpZiAobiAlIChpICsgMTYpID09PSAwKSByZXR1cm4gaSArIDE2ID09PSBuOwogICAgICAgIGlmIChuICUgKGkgKyAyMikgPT09IDApIHJldHVybiBpICsgMjIgPT09IG47CiAgICAgICAgaWYgKG4gJSAoaSArIDI0KSA9PT0gMCkgcmV0dXJuIGkgKyAyNCA9PT0gbjsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiogZ2VuZXJhdGVQcmltZXMobikgewogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpZiAoaXNQcmltZShpKSkgewogICAgICAgICAgICB5aWVsZCBpOwogICAgICAgIH0KICAgIH0KfQoKKGZ1bmN0aW9uIHRlc3QoKSB7CiAgICBjb25zdCBwID0gZ2VuZXJhdGVQcmltZXMoMTAwKTsKICAgIGRvIHsKICAgICAgICBhID0gcC5uZXh0KCk7CiAgICAgICAgaWYoIWEuZG9uZSkgewogICAgICAgIAljb25zb2xlLmxvZyhhLnZhbHVlKTsKICAgICAgICB9CiAgICB9IHdoaWxlKCFhLmRvbmUpOwp9KSgpOwo=