Beispiel #1
0
        public static long Solution()
        {
            long solution = 0;

            for (long i = 2; i <= limit; i++)
            {
                if ((i % 2) == 0)
                {
                    var k = i / 2;
                    solution += UtilityFunctions.IntegralPower(30, k - 1) * 20;
                }
                // else if(i%4 == 1)
                // {
                //     var k = (i - 1) / 4;
                //     solution += UtilityFunctions.IntegralPower(600, k) * 5;
                // }
                else if (i % 4 == 3)
                {
                    var k = (i + 1) / 4;
                    solution += UtilityFunctions.IntegralPower(500, k - 1) * 100;
                }
            }

            return(solution);
        }
        public static double Solution()
        {
            double solution = 0;

            double peter = 0;
            long   colin = 0;

            long totalColin = 0;
            long totalPeter = 0;

            var peterCount = (double)UtilityFunctions.IntegralPower(4, 9);
            var colinCount = (double)UtilityFunctions.IntegralPower(6, 6);

            for (int n = 36; n >= 6; n--)
            {
                colin       = DieRolls(n, 6, 6);
                totalColin += colin;

                solution += (colin / colinCount) * (peter);

                var tempPeter = DieRolls(n, 9, 4);
                totalPeter += tempPeter;

                peter += tempPeter / peterCount;
            }



            return(solution);
        }
        private static double[][] GenerateRandomGrid(int size)
        {
            var    numberOfRandoms = size * (size + 1) / 2;
            var    randoms         = new double[size][];
            double t = 0;

            for (int k = 1; k <= size; k++)
            {
                randoms[k - 1] = new double[k];
                for (int j = 1; j <= k; j++)
                {
                    t = (615949 * t + 797807) % UtilityFunctions.IntegralPower(2, 20);
                    randoms[k - 1][j - 1] = t - UtilityFunctions.IntegralPower(2, 19);
                }
            }

            return(randoms);
        }
        public static long Solution()
        {
            var  stopwatch = new System.Diagnostics.Stopwatch();
            long solution  = 0;

            var divisorsOfOrder = UtilityFunctions.Divisors(order);
            var primes          = UtilityFunctions.Primes((int)Math.Sqrt(UtilityFunctions.IntegralPower(2, order / 2) + 1));

            var primeFactors  = UtilityFunctions.PrimeFactors(UtilityFunctions.IntegralPower(2, order) - 1, primes);
            var reducedPrimes = primeFactors.Select(t => t.Item1).ToList();

            foreach (var d in divisorsOfOrder)
            {
                var m = UtilityFunctions.Moebius(d, null, primes);
                if (m != 0)
                {
                    var divisorsOfPowerOfTwo = UtilityFunctions.Divisors(UtilityFunctions.IntegralPower(2, order / d) - 1, null, reducedPrimes);
                    solution += (divisorsOfPowerOfTwo.Sum() + divisorsOfPowerOfTwo.Count()) * m;
                }
            }

            return(solution);
        }
        public static long Solution1()
        {
            long solution     = 0;
            long power        = UtilityFunctions.IntegralPower(2, order) - 1;
            var  primes       = UtilityFunctions.Primes(UtilityFunctions.IntegralPower(2, order / 4));
            var  primeFactors = new List <long>();
            var  ordersModP   = new List <long>();
            var  powersOfTwo  = new Dictionary <long, long>();
            bool keyAdded     = false;
            var  factors      = new Dictionary <long, long>();

            for (int i = 2; i <= Math.Sqrt(order); i++)
            {
                if (order % i == 0)
                {
                    powersOfTwo.Add(i, UtilityFunctions.IntegralPower(2, i) - 1);
                    if (i * i != order)
                    {
                        powersOfTwo.Add(order / i, UtilityFunctions.IntegralPower(2, order / i) - 1);
                    }
                }
            }

            var keys = powersOfTwo.Keys.OrderBy(t => t).ToArray();

            foreach (var p in primes)
            {
                if (power < p * p)
                {
                    keyAdded = false;
                    primeFactors.Add(power);
                    foreach (var key in keys)
                    {
                        if (powersOfTwo[key] % power == 0)
                        {
                            keyAdded = true;
                            ordersModP.Add(key);
                            break;
                        }
                    }
                    if (!keyAdded)
                    {
                        ordersModP.Add(order);
                    }
                    break;
                }
                var primePower = p;
                while (power % p == 0)
                {
                    keyAdded = false;
                    primeFactors.Add(p);
                    foreach (var key in keys)
                    {
                        if (powersOfTwo[key] % primePower == 0)
                        {
                            keyAdded = true;
                            ordersModP.Add(key);
                            break;
                        }
                    }
                    if (!keyAdded)
                    {
                        ordersModP.Add(order);
                    }
                    power      /= p;
                    primePower *= p;
                }
            }

            factors.Add(1, 1);

            for (int i = 0; i < primeFactors.Count; i++)
            {
                keys = factors.Keys.ToArray();
                foreach (var key in keys)
                {
                    var newKey = key * primeFactors[i];
                    if (!factors.ContainsKey(newKey))
                    {
                        factors.Add(newKey, UtilityFunctions.Lcm(factors[key], ordersModP[i]));
                    }
                }
            }

            foreach (var factor in factors)
            {
                if (factor.Value == order)
                {
                    solution += factor.Key + 1;
                }
            }


            return(solution);
        }