public void Factor_Input1_Output1()
 {
     Assert.Equal(Divisors.AllDivisors(1), new HashSet <long>()
     {
         1
     });
 }
 public void Factor_Input21_Output1_3_7_21()
 {
     Assert.Equal(Divisors.AllDivisors(21), new HashSet <long>()
     {
         1, 3, 7, 21
     });
 }
 public void Factor_Input28_Output1_2_4_7_14_28()
 {
     Assert.Equal(Divisors.AllDivisors(28), new HashSet <long>()
     {
         1, 2, 4, 7, 14, 28
     });
 }
 public void Factor_Input15_Output1_3_5_15()
 {
     Assert.Equal(Divisors.AllDivisors(15), new HashSet <long>()
     {
         1, 3, 5, 15
     });
 }
 public void Factor_Input10_Output1_2_5_10()
 {
     Assert.Equal(Divisors.AllDivisors(10), new HashSet <long>()
     {
         1, 2, 5, 10
     });
 }
 public void Factor_Input6_Output1_2_3_6()
 {
     Assert.Equal(Divisors.AllDivisors(6), new HashSet <long>()
     {
         1, 2, 3, 6
     });
 }
Example #7
0
        internal static string Smallest_multiple()
        {
            bool number = true;
            long val    = divis;

            while (number)
            {
                number = false;
                for (long i = 1; i <= divis; i++)
                {
                    if (Divisors.IsDivisor(val, i))
                    {
                        if (i == divis)
                        {
                            number = false;
                        }
                    }
                    else
                    {
                        val    = val + divis;
                        number = true;
                        i      = 1;
                        break;
                    }
                }
            }
            return(val.ToString());
        }
        //    A number n is called called abundant if sum of its proper divisors exceeds n.
        public long GetNonabundantsum(int to)
        {
            //lag liste av aktuelle AbundantNumber
            var abundantNumbersListe = Enumerable.Range(1, to).Where(i => Divisors.IsAbundantNumber(i)).ToList();

            //lag hashmap av AbundantNumber listen
            var abundantNumbersDictionary = abundantNumbersListe.ToDictionary(e => e);



            //finn summen
            //er  i= a+b hvor a og b er AbundantNumber ? , ellers legg til sum
            long nonabundantsum = 0;


            for (int i = 1; i <= to; i++)
            {
                if (
                    abundantNumbersListe
                    .Where(e => e < i)
                    .Where(a => abundantNumbersDictionary.ContainsKey(i - a))
                    .FirstOrDefault() == 0     //hvis ikke i kan skrives som summen av to tall i abundantNumbersListe
                    )
                {
                    nonabundantsum += i;
                }
            }

            return(nonabundantsum);
        }
            private void FindWays()
            {
                for (int ii = 2; ii <= Value / 2 + 1; ii++)
                {
                    if (Value % ii == 0)
                    {
                        Divisors.Add(ii);
                    }

                    var fraction      = Value / ii;
                    var smallestStart = Math.Max(1, fraction - ii - 1);
                    for (var start = smallestStart; start <= ii; start++)
                    {
                        if (Ways.Any(existingWay => existingWay.First() == start))
                        {
                            continue;
                        }
                        var way = new List <int>();
                        var sum = 0;
                        var num = start;
                        while (sum < Value)
                        {
                            sum += num;
                            way.Add(num);
                            num++;
                        }

                        if (sum == Value)
                        {
                            Ways.Add(way);
                        }
                    }
                }
            }
Example #10
0
 public void GetDivisors_InputIsValid_ReturnsDivisors()
 {
     Divisors.GetDivisors(1).ShouldBeSubsetOf(new List <int> {
         1
     });
     Divisors.GetDivisors(2).ShouldBeSubsetOf(new List <int> {
         1, 2
     });
     Divisors.GetDivisors(3).ShouldBeSubsetOf(new List <int> {
         1, 2, 3
     });
     Divisors.GetDivisors(4).ShouldBeSubsetOf(new List <int> {
         1, 2, 4
     });
     Divisors.GetDivisors(5).ShouldBeSubsetOf(new List <int> {
         1, 5
     });
     Divisors.GetDivisors(9).ShouldBeSubsetOf(new List <int> {
         1, 3, 9
     });
     Divisors.GetDivisors(10).ShouldBeSubsetOf(new List <int> {
         1, 2, 5, 10
     });
     Divisors.GetDivisors(11).ShouldBeSubsetOf(new List <int> {
         1, 11
     });
     Divisors.GetDivisors(13).ShouldBeSubsetOf(new List <int> {
         1, 13
     });
     Divisors.GetDivisors(20).ShouldBeSubsetOf(new List <int> {
         1, 2, 4, 5, 10, 20
     });
 }
Example #11
0
        public void TestMostDivisibleNumberMin0Max12()
        {
            var expected = 12;
            var output   = Divisors.MostDivisibleNumber(0, 12).Result;

            Assert.AreEqual(expected, output);
        }
Example #12
0
        public void TestMostDivisibleNumberMin1Max1()
        {
            var expected = 1;
            var output   = Divisors.MostDivisibleNumber(1, 1).Result;

            Assert.AreEqual(expected, output);
        }
 public void Factor_Input3_Output1_3()
 {
     Assert.Equal(Divisors.AllDivisors(3), new HashSet <long>()
     {
         1, 3
     });
 }
        public void AddDivisor(long number)
        {
            if (number <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(number), $"The number {number} is not a valid Divisor.");
            }

            Divisors.Add(number);
        }
Example #15
0
        /*
         * for every divisor d of n, d+n/d is prime.
         */
        public bool IsPrimeGenerating(long number)
        {
            if (number % 2 == 1)
            {
                return(false);
            }


/*
 *          for (long divisor1 = 2; divisor1 < number; divisor1++)
 *          {
 *              long divisor2 = number / divisor1;
 *              if (divisor1 > divisor2) return true;
 *
 *              if (number % divisor1 == 0 )
 *              {
 *
 *
 *
 *                  if (!primeDictionary.ContainsKey(divisor1 + divisor2)) return false;
 *              }
 *
 *
 *          }
 *
 *          return true;
 */

            List <long> divisors = Divisors.GetAllUniqueDivisorsIn(number);

            int len = divisors.Count();

            if (len % 2 == 1)
            {
                return(false);
            }

            //if (len == 2)
            //    return !primeDictionary.ContainsKey(number);

            if (number == 442)
            {
                var aa = 1;
            }

            //  List<long> liste = divisors.Select(d => d + number / d).Distinct().ToList();
            List <long> liste = divisors.Take(len).Select(d => d + number / d).Distinct().ToList();

            // List<long> liste = divisors.Take(len/2).ToList();

            //  return liste.All(d => Primes.IsPrime(d, primeliste));

            //  return liste.All(d => primeDictionary.ContainsKey(d));


            return(liste.All(d => primeDictionary.ContainsKey(d)));
        }
        private bool IsAbundantNumber(int number)
        {
            int sum = 0;

            foreach (int divisor in Divisors.GetDivisors(number))
            {
                sum += divisor;
            }
            return(sum > number);
        }
Example #17
0
        public void TestDivisors(uint n, uint[] divisors)
        {
            int i = 0;

            foreach (uint divisor in Divisors.AllDivisors(n))
            {
                Assert.LessThan(i, divisors.Length, "Expected {0}<{1} for number {2}", i, divisors.Length, n);
                Assert.AreEqual(divisors[i++], divisor);
            }
        }
Example #18
0
        public void TestPrimeDivisors(uint n, uint[] divisors)
        {
            int i = 0;

            foreach (uint primeDivisor in Divisors.PrimeDivisors(n))
            {
                Assert.LessThan(i, divisors.Length);
                Assert.AreEqual(divisors[i++], primeDivisor);
            }
        }
Example #19
0
        public void TestGetListOfDivisors1()
        {
            var expected = new List <int>
            {
                1
            };
            var output = Divisors.GetListOfDivisors(1);

            CollectionAssert.AreEqual(expected, output);
        }
Example #20
0
 internal static bool IsAbundant_Digit(int value)
 {
     if (Divisors.SummDivisor(value) > value)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #21
0
        public void TestFor284()
        {
            IList <Int32> divisorsOfNumber = Divisors.DivisorsOfNumber(284);

            Int32[] expected = new[] { 1, 2, 4, 71, 142 };
            Assert.AreEqual(expected.Length, divisorsOfNumber.Count);

            foreach (Int32 i in expected)
            {
                Assert.Contains(i, (ICollection)divisorsOfNumber);
            }
        }
Example #22
0
 public long GetFirstWithNumbersOfDivisors(long above)
 {
     foreach (var nextTriangularNumber in TriangleNumber.Iterastor())
     {
         var allUniqueDivisors = Divisors.GetAllUniqueDivisorsIn(nextTriangularNumber);
         if (allUniqueDivisors.Count > above)
         {
             return(nextTriangularNumber);
         }
     }
     return(-1);
 }
Example #23
0
        public void TestFor220()
        {
            IList <Int32> divisorsOfNumber = Divisors.DivisorsOfNumber(220);

            Int32[] expected = new[] { 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 };
            Assert.AreEqual(expected.Length, divisorsOfNumber.Count);

            foreach (Int32 i in expected)
            {
                Assert.Contains(i, (ICollection)divisorsOfNumber);
            }
        }
Example #24
0
        internal static string Largest_prime_factor()
        {
            var primes = Divisors.GetPrimeListOfDivisors(n);

            foreach (var prime in primes)
            {
                MathsProblemsForm.Log(prime.ToString());
            }
            var maxPrime = primes[primes.Count - 1];

            return(maxPrime.ToString());
        }
Example #25
0
        public void TestGetListOfDivisors5040()
        {
            var expected = new List <int>
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20,
                21, 24, 28, 30, 35, 36, 40, 42, 45, 48, 56, 60, 63, 70,
                72, 80, 84, 90, 105, 112, 120, 126, 140, 144, 168, 180,
                210, 240, 252, 280, 315, 336, 360, 420, 504, 560, 630,
                720, 840, 1008, 1260, 1680, 2520, 5040
            };
            var output = Divisors.GetListOfDivisors(5040);

            CollectionAssert.AreEqual(expected, output);
        }
        public static int DenominatorProductFractions()
        {
            var(multNumerator, multDenominator) = (1, 1);

            for (int numerator = 10; numerator < 100; numerator++)
            {
                var nLeft  = numerator % 10;
                var nRight = numerator / 10;

                for (int denominator = numerator + 1; denominator < 100; denominator++)
                {
                    if (numerator % 10 == 0 && denominator % 10 == 0)
                    {
                        continue;
                    }

                    var fraction = numerator / (double)denominator;

                    var dLeft = denominator % 10;
                    var dRight = denominator / 10;
                    int a = -1, b = -1;

                    if (nLeft == dLeft)
                    {
                        (a, b) = (nRight, dRight);
                    }
                    else if (nLeft == dRight)
                    {
                        (a, b) = (nRight, dLeft);
                    }
                    else if (nRight == dLeft)
                    {
                        (a, b) = (nLeft, dRight);
                    }
                    else if (nRight == dRight)
                    {
                        (a, b) = (nLeft, dLeft);
                    }

                    if (a < b && fraction == a / (double)b)
                    {
                        multNumerator   *= a;
                        multDenominator *= b;
                    }
                }
            }

            return((int)Divisors.LowestCommonTerms(multNumerator, multDenominator).denominator);
        }
Example #27
0
        private int GetDofN(int number)
        {
            if (memo.ContainsKey(number))
            {
                return(memo[number]);
            }
            int sum = 0;

            foreach (int divisor in Divisors.GetDivisors(number))
            {
                sum += divisor;
            }
            memo.Add(number, sum);
            return(sum);
        }
Example #28
0
        public long Solve()
        {
            uint count = 1;

            while (true)
            {
                uint triangleNumber = count * (count + 1) / 2;
                uint n = Divisors.NumberOfDivisors(triangleNumber);
                if (n > 500)
                {
                    return(triangleNumber);
                }
                count++;
            }
        }
Example #29
0
            internal static int Amicable_numbers(int value)
            {
                int ammDigits = 0;
                int temp2     = 0;

                ammDigits = Divisors.SummDivisor(value);
                temp2     = Divisors.SummDivisor(ammDigits);
                if (temp2 == value)
                {
                    return(ammDigits);
                }
                else
                {
                    return(0);
                }
            }
Example #30
0
        internal static string Highly_divisible_triangular_number()
        {
            long value      = 1;
            long temp       = 2;
            var  resultList = new List <long>();

            while (resultList.Count <= 500)
            {
                resultList = Divisors.GetList(value);
                value      = value + temp;
                temp++;
            }
            var result = value - (temp - 1);

            return(result.ToString());
        }