Published
Edited
May 11, 2022
6 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
gprimes_sector = (n) =>
range(n).flatMap(i => range(i).map(j => [j, i-j])).filter(isgprime)
Insert cell
eprimes_sector = (n) =>
range(n).flatMap(i => range(i).map(j => [j, i-j])).filter(iseprime)
Insert cell
isgprime = ([x, y]) => gprime_norms.has(x*x + y*y)
Insert cell
iseprime = ([x, y]) => eprime_norms.has(x*x + y*y + x*y)
Insert cell
gprimes = (n) => gprimes_sector(n).flatMap((X) => {
let Y = X;
return [Y, Y=grotate(Y), Y=grotate(Y), Y=grotate(Y)]
})
Insert cell
eprimes = (n) => eprimes_sector(n).flatMap((X) => {
let Y = X;
return [Y, Y=erotate(Y), Y=erotate(Y), Y=erotate(Y), Y=erotate(Y), Y=erotate(Y)]
})
Insert cell
erotate = ([Cx, Cy]) => [Cx + Cy, -Cx]
Insert cell
grotate = ([Cx, Cy]) => [-Cy, Cx]
Insert cell
// Adapted from @tmcw/sieve-of-eratosthenes
primes = {
let n = 1e5;
let candidates = (new Array(n)).fill(true);
candidates[0] = candidates[1] = false;
for (let i = 2; i < Math.sqrt(n); i++) {
if (!candidates[i]) continue;
for (let j = i + i; j < n; j += i) candidates[j] = false;
}
return candidates
.map((x, i) => x ? i : false)
.filter(x => x);
}
Insert cell
eprime_norms = new Set(primes.map(x => ((x % 3) === 2) ? x*x : x))
Insert cell
gprime_norms = new Set(primes.map(x => ((x % 4) === 3) ? x*x : x))
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more