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); }