public static long longLargestPrimeFactor() { long number = 600851475143; long lastPrime = 1; long largestPrimeNumber = 0; while (lastPrime <= Math.Sqrt(number)) { if (number % lastPrime == 0 && lastPrime > largestPrimeNumber) { largestPrimeNumber = lastPrime; } lastPrime = PrimeHelpers.GetNextPrime(lastPrime); } return(largestPrimeNumber); }
public static long TruncatablePrimes() { long result = 0; int count = 0; long primeNumber = 11; while (count < 11) { bool isFound = true; long left = primeNumber; long right = primeNumber; int length = MathHelpers.IntLength(left); while (length > 1) { length--; left /= 10; long rightPow = (long)Math.Pow(10, MathHelpers.IntLength(right) - 1); long digit = right / rightPow; right -= digit * rightPow; if (!PrimeHelpers.IsPrimeNumber(left) || !PrimeHelpers.IsPrimeNumber(right)) { isFound = false; break; } } if (isFound) { result += primeNumber; count++; } primeNumber = PrimeHelpers.GetNextPrime(primeNumber); } return(result); }