Vielen, vielen Dank dafür. War doch etwas komplexer, als ursprünglich angenommen. Doch durch Umstellung deiner Formel, kann ich das nun als Code verwenden. Ich bringe mir das Programmieren bei und versuche mich gerade an Multithreading. Dadurch, dass ich meine Vergleichsfunktion dank dir nun gleichmäßiger auf die Prozessorkerne verteilen kann, gewinnt mein Testprogramm rund 10% mehr Performance (bei 21025 "Leuten").
Für Interessierte, so sieht der Test-Code mit der umgestellten Formel aus:
const l = 21025;
const m = 4;
for (let i = 0, sum = 0; i < m; i++) {
const test = Math.round(-(Math.sqrt(((l - sum) ** 2) - (((l - sum) * (l - sum - 1) / 2) / (m - i)) * 2)) + l - sum);
sum += test;
console.log(test);
console.log(test * (l - (sum - test) - test) + test * (test - 1) / 2);
}
Als Ergebnis kommt heraus (je "Anzahl Leute" und "klingende Gläser" pro Schritt):
2817
55258272
3341
55250117
4354
55250083
10410
55251075