Hey,
Gegeben sei ein Integer
Finde zwei Integer
Das habe ich auch soweit hingekriegt:
Ein Beispiel: Wählen wir
Dabei erhalte ich folgende, gültige Kombinationen:
Ich habe allerdings vor, aus all diesen Kombinationen nur eine zufällige zu berechnen, da es enorm viele Kombinationen gibt, wenn der Unterschied zwischen
Ich möchte ein Paar berechnen das folgende Eigenschaften hat:
Zur Verdeutlichung, mögliche Lösungen aus dem vorrigen Beispiel wären also:
Wie finde ich ein solches Paar ohne alle Möglichkeiten vorzuberechnen und dann jedes einzelne Paar auf oben genannte Bedingung zu prüfen? (Das wäre nämlich sehr ineffizient)
Gegeben sei ein Integer
$r$
sowie ein Limit $L$
.Finde zwei Integer
$a, b$
so dass gilt $a \mod b = r$
. Dabei gilt $0 <= a, b <= L$
.Das habe ich auch soweit hingekriegt:
C#-Quellcode
- private static IEnumerable<(uint, uint)> GenerateRemPairs(uint r, uint limit)
- {
- // Ensure value is not uint maxvalue
- if (r == uint.MaxValue)
- throw new ArgumentOutOfRangeException(nameof(r));
- // Ensure r is smaller then the limit
- if(r >= limit)
- throw new ArgumentOutOfRangeException(nameof(r));
- // Find all possible values for a,b such that a % b = r
- for (uint b = r + 1; b <= limit; b++)
- for (uint i = 0; i < r; i++)
- {
- uint a = r + i * b;
- if (a <= limit)
- yield return (a, b);
- }
- }
Ein Beispiel: Wählen wir
$r=7$
und $L=16$
.Dabei erhalte ich folgende, gültige Kombinationen:
Ich habe allerdings vor, aus all diesen Kombinationen nur eine zufällige zu berechnen, da es enorm viele Kombinationen gibt, wenn der Unterschied zwischen
$r$
und $L$
groß ist. Mit anderen Worten, nein, alle Kombinationen berechnen und eine zufällig zu wählen ist nicht die Lösung.Ich möchte ein Paar berechnen das folgende Eigenschaften hat:
$a,b \neq r$
, außer es gibt kein solches Paar, dann gilt diese Einschränkung nicht.Zur Verdeutlichung, mögliche Lösungen aus dem vorrigen Beispiel wären also:
Wie finde ich ein solches Paar ohne alle Möglichkeiten vorzuberechnen und dann jedes einzelne Paar auf oben genannte Bedingung zu prüfen? (Das wäre nämlich sehr ineffizient)
C# Developer
Learning C++
Learning C++