{
let rad = 300;
let nMax = 64;
return svg`<svg width="${rad * 2}" height="${
rad * 2
}" viewBox="${-rad} ${-rad} ${2 * rad} ${2 * rad}">
${_.range(1, nMax).flatMap((n) => {
let nRad = (rad * n) / nMax;
return _.range(0, n).map((r) => {
let color = allQuadraticResidues[n].includes(r)
? "red"
: allPrimitiveRoots[n].includes(r)
? "blue"
: "white";
return svg`<path fill="${color}" stroke="${'none'}" d="${d3.arc()({
innerRadius: nRad,
outerRadius: (rad * (n + 1)) / nMax,
startAngle: ((r - 0.5) / n) * 2 * Math.PI,
endAngle: ((r + 0.5) / n) * 2 * Math.PI
})}"/>`;
});
})}
</svg>`;
}