From e57a1c0335e85959314ce5a8e61b3f08350f6248 Mon Sep 17 00:00:00 2001 From: filifa Date: Mon, 4 May 2026 22:25:30 -0400 Subject: [PATCH] add ability to sieve custom function --- junk/sieves/sieves.html | 11 ++++++++++- junk/sieves/sieves.js | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/junk/sieves/sieves.html b/junk/sieves/sieves.html index 9762914..5664a17 100644 --- a/junk/sieves/sieves.html +++ b/junk/sieves/sieves.html @@ -20,6 +20,7 @@

Sieving Multiplicative Functions

Posted

+

Updated

The @@ -76,8 +77,15 @@ + + + + + + + @@ -1125,7 +1133,8 @@ function mobius(p, k) {

Many multiplicative and additive functions have simple formulas for prime powers, which makes adding a new function to sieve very - easy with this approach.

+ easy with this approach. The demo even lets you write your own custom + function to sieve - try it out!

diff --git a/junk/sieves/sieves.js b/junk/sieves/sieves.js index d787c0d..1c76431 100644 --- a/junk/sieves/sieves.js +++ b/junk/sieves/sieves.js @@ -133,6 +133,14 @@ function sieveMultiples(p, q, l, r, y, sieve, quo, additive) { } } +function setCustomFunctionVisibility(e) { + const isHidden = e.target.value !== "custom"; + document.querySelector("#custom-function-label").hidden = isHidden; + document.querySelector("#custom-function").hidden = isHidden; + document.querySelector("#custom-function-additive-label").hidden = isHidden; + document.querySelector("#custom-function-additive").hidden = isHidden; +} + function getFunc(func) { switch (func.value) { case "num-divisors": @@ -149,6 +157,11 @@ function getFunc(func) { return [littleOmega, true]; case "big-omega": return [bigOmega, true]; + case "custom": + const def = document.querySelector("#custom-function"); + const isAdditive = document.querySelector("#custom-function-additive"); + const f = new Function("p", "k", def.value); + return [f, isAdditive.checked]; default: throw new Error("function not implemented!"); } @@ -219,4 +232,5 @@ function calculate() { result.appendChild(table); } +document.querySelector("#function").addEventListener("change", (e) => setCustomFunctionVisibility(e)) document.querySelector("#enter").addEventListener("click", () => calculate())