예제 #1
0
        static void Main(string[] args)
        {
            primes = pg.GetPrimesBelowOneMillion();
            int  len         = 2;
            int  result      = 0;
            bool foundResult = false;

            while (!foundResult)
            {
                for (int i = 0; i < primes.Length - len; i++)
                {
                    int sum = SumPrimes(i, len);
                    if (sum >= MAX)
                    {
                        if (i == 0)
                        {
                            foundResult = true;
                            break;
                        }
                        break;
                    }
                    if (primes.Contains(sum))
                    {
                        result = sum;
                    }
                }
                len++;
            }
            Console.WriteLine(string.Format("Result is {0}", result));
        }
예제 #2
0
        static void Main(string[] args)
        {
            int[] primes = pg.GetPrimesBelowOneMillion().Where(x => x < PRIME_LIMIT).ToArray();
            primeMark = pg.CheckPrimeNumber(PRIME_LIMIT);
            Dictionary <int, Dictionary <int, bool> > PrimeContat = new Dictionary <int, Dictionary <int, bool> >();

            #region 找出所有的素数对
            for (int i = 0; i < primes.Length; i++)
            {
                for (int j = i + 1; j < primes.Length; j++)
                {
                    if (PrimeContat.ContainsKey(primes[i]) && PrimeContat[primes[i]].ContainsKey(primes[j]))
                    {
                        continue;
                    }
                    bool isContat = CheckContact(primes[i], primes[j]);
                    if (!isContat)
                    {
                        continue;
                    }
                    if (PrimeContat.ContainsKey(primes[i]))
                    {
                        if (PrimeContat[primes[i]].ContainsKey(primes[j]))
                        {
                            continue;
                        }
                        PrimeContat[primes[i]].Add(primes[j], isContat);
                    }
                    else
                    {
                        Dictionary <int, bool> tmp = new Dictionary <int, bool>();
                        tmp.Add(primes[j], isContat);
                        PrimeContat.Add(primes[i], tmp);
                    }
                    if (PrimeContat.ContainsKey(primes[j]))
                    {
                        if (PrimeContat[primes[j]].ContainsKey(primes[i]))
                        {
                            continue;
                        }
                        PrimeContat[primes[j]].Add(primes[i], isContat);
                    }
                    else
                    {
                        Dictionary <int, bool> tmp = new Dictionary <int, bool>();
                        tmp.Add(primes[i], isContat);
                        PrimeContat.Add(primes[j], tmp);
                    }
                }
            }
            #endregion
        }
예제 #3
0
        static void Main(string[] args)
        {
            for (int i = 0; i < 10000; i++)
            {
                squares[i * i] = true;
            }
            squares[0] = false;
            PrimeGenerator pg = new PrimeGenerator();

            primes   = pg.GetPrimesBelowOneMillion();
            primeTag = pg.CheckPrimeNumber(1000000);
            int  squTwice = 0;
            int  firstOdd = 0;
            bool pass     = false;

            for (int i = 3; ; i += 2)
            {
                if (primeTag[i])
                {
                    continue;
                }
                pass = false;
                foreach (int prime in primes)
                {
                    if (i <= prime)
                    {
                        break;
                    }
                    squTwice = i - prime;
                    if (squTwice % 2 != 0)
                    {
                        continue;
                    }
                    squTwice = squTwice / 2;
                    if (!squares[squTwice])
                    {
                        continue;
                    }
                    pass = true;
                    break;
                }
                if (pass)
                {
                    continue;
                }
                firstOdd = i;
                break;
            }
            Console.WriteLine(string.Format("Result is {0}", firstOdd));
        }
예제 #4
0
        static void Main(string[] args)
        {
            PrimeGenerator pg = new PrimeGenerator();

            int[] primes = pg.GetPrimesBelowOneMillion();
            int   rlt    = 1;
            int   tmp    = 1;

            foreach (int p in primes)
            {
                tmp = tmp * p;
                if (tmp >= NUMCOUNT)
                {
                    break;
                }
                rlt = tmp;
            }
            Console.WriteLine(rlt);
        }
예제 #5
0
        static void Main(string[] args)
        {
            PrimeGenerator pg = new PrimeGenerator();

            int[]  primes    = pg.GetPrimesBelowOneMillion();
            bool[] primeMark = pg.CheckPrimeNumber(1000000);
            for (int i = 0; i < primes.Length; i++)
            {
                int   prime  = primes[i];
                int[] digits = NumberUtils.SplitNumber(prime, 1);
                for (int mark = 1; mark < ((1 << digits.Length) - 1); mark++)
                {
                    int primeCount = 0;
                    for (int n = 0; n < 10; n++)
                    {
                        int[] markedDigits = ChangeMarkedDigits(digits, mark, n);
                        if (markedDigits[0] % 2 == 0 || markedDigits[0] % 5 == 0)
                        {
                            continue;
                        }
                        if (markedDigits[digits.Length - 1] == 0)
                        {
                            continue;
                        }
                        int num = MarkDigitsToNumber(markedDigits);
                        if (!primeMark[num])
                        {
                            continue;
                        }
                        primeCount++;
                    }
                    if (primeCount == 8)
                    {
                        int result = int.MaxValue;
                        for (int n = 0; n < 10; n++)
                        {
                            int[] markedDigits = ChangeMarkedDigits(digits, mark, n);
                            if (markedDigits[0] % 2 == 0 || markedDigits[0] % 5 == 0)
                            {
                                continue;
                            }
                            if (markedDigits[digits.Length - 1] == 0)
                            {
                                continue;
                            }
                            int num = MarkDigitsToNumber(markedDigits);
                            if (!primeMark[num])
                            {
                                continue;
                            }
                            if (num < result)
                            {
                                result = num;
                            }
                        }
                        Console.WriteLine("Result is {0}", result);
                        return;
                    }
                    //Console.WriteLine(Convert.ToString(mark, 2));
                }
            }
        }