public void NumberTheory_Basic_Test() { var natural = new Natural(9); var relative_natural = new Natural(38); var valid_natural = new Natural(36); int relativelyprime = 1, gcd = 9, lcm = 342; Natural actual; actual = natural.Gcd(relative_natural); //actual = relative_natural.Gcd(natural); Assert.AreEqual(relativelyprime, actual.GetIntValue()); Console.WriteLine("Relatively Prime (38,9): " + actual.GetIntValue()); natural = new Natural(9); var IsRelativelyPrime = natural.IsRelativelyPrimeTo(relative_natural); Assert.AreEqual(true, IsRelativelyPrime); Console.WriteLine("Relatively Prime (38,9): " + IsRelativelyPrime); natural = new Natural(0); var IsPrime = natural.IsPrime(); Console.WriteLine("Is 38 Prime?: " + IsPrime); natural = new Natural(9); actual = natural.Lcm(relative_natural); Assert.AreEqual(lcm, actual.GetIntValue()); Console.WriteLine("Valid LCM (38,9): " + actual.GetIntValue()); natural = new Natural(9); actual = natural.Gcd(valid_natural); Assert.AreEqual(gcd, actual.GetIntValue()); Console.WriteLine("Valid GCD (36,9): " + actual.GetIntValue()); }
public static bool DecreaseAndConquer(int limit, List <int> numbers) { //Natural number = new Natural(); //Natural gcd; //int relativelyprime = 1; List <Natural> list = new List <Natural>(); List <bool> pairwise = new List <bool>(); var pairs = new Dictionary <int, List <int> >(); foreach (var n in numbers) { list.Add(new Natural(n)); } for (int i = 0; i <= limit - 1; i++) { var current = new Natural(list[i].GetIntValue()); for (int j = 0; j <= limit - 1; j++) { if ((j == i) && (j != limit - 1)) { j++; } else if (i == limit - 1 && j == limit - 1) { continue; } if (pairs.ContainsKey(list[i].GetIntValue())) { pairs[list[i].GetIntValue()].Add(list[j].GetIntValue()); } else { pairs.Add(list[i].GetIntValue(), new List <int> { list[j].GetIntValue() }); } if (pairs.ContainsKey(list[j].GetIntValue())) { if (pairs[list[j].GetIntValue()].Contains(list[i].GetIntValue())) { continue; } } var sub = new Natural(current.GetIntValue()); //Console.WriteLine("DOING: " + sub.GetIntValue() + " GCD ON " + list[j].GetIntValue()); var subprogram = sub.Gcd(list[j]); //Console.WriteLine("EQUAL TO: " + subprogram.GetIntValue()); //GCD({0},{1}) = {3} if (subprogram.GetIntValue() == 1) { pairwise.Add(true); } else { pairwise.Add(false); } Console.WriteLine("GCD(" + list[i].GetIntValue() + "," + list[j].GetIntValue() + ") = " + subprogram.GetIntValue()); } } bool PairwiseRelativelyPrime; if (pairwise.Contains(false)) { PairwiseRelativelyPrime = false; } else { PairwiseRelativelyPrime = true; } return(PairwiseRelativelyPrime); }