Hey,
Also, hatte schon mal so eine ähnliche Frage, hier nochmal mit einer kleinen Abwandlung.
Gegeben sei ein Integer x zwischen
Es gilt
Die Ausgangsfrage
Daraus folgt
Ich möchte also für jede Zahl zwischen
ein
Habe folgendes auf die Beine gestellt, failed aber bei höheren Werten weil ich keine Teiler finde :c
Also, hatte schon mal so eine ähnliche Frage, hier nochmal mit einer kleinen Abwandlung.
Gegeben sei ein Integer x zwischen
0
bis int.MaxValue - 1
.Es gilt
a
und b
zu finden, sodass a % b = x
.a
ist random, aber es muss gelten a > x
.Die Ausgangsfrage
a % b = x
lässt sich umformulieren in a = n*b + x
.Daraus folgt
a - x = n*b
bzw (a - x)/n = b
.Ich möchte also für jede Zahl zwischen
0
und int.MaxValue - 1
ein
a
und ein b
finden sodass a % b = x
gilt und auch das a
und b
beides ints sind, und keine longs.Habe folgendes auf die Beine gestellt, failed aber bei höheren Werten weil ich keine Teiler finde :c
C#-Quellcode
- private static readonly Random Random = new Random();
- public static void Main(string[] args)
- {
- int number = 1337;
- var stuff = FindModulo(number);
- Console.WriteLine($"a = {stuff[0]}");
- Console.WriteLine($"b = {stuff[1]}");
- Console.WriteLine($"a%b = {stuff[0] % stuff[1]}");
- }
- public static int[] FindModulo(int target)
- {
- if (target < 0)
- throw new ArgumentOutOfRangeException(nameof(target));
- var a = 0;
- var b = 0;
- do
- {
- a = Random.Next(target + 1, int.MaxValue);
- int ax = a - target;
- var ds = GetFactors(ax).Where(x => x > target).ToArray();
- var dx = ds.ElementAt(Random.Next(1, ds.Length));
- b = ax / dx;
- } while (b < target);
- return new[] {a, b};
- }
- static IEnumerable<int> GetFactors(int n)
- {
- var pairList =
- from i in Enumerable.Range(1, (int) (Math.Round(Math.Sqrt(n) + 1)))
- where n % i == 0
- select new {A = i, B = n / i};
- foreach (var pair in pairList)
- {
- yield return pair.A;
- yield return pair.B;
- }
- }
C# Developer
Learning C++
Learning C++