示例#1
0
        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);
        }
示例#2
0
        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);
        }